shell suppress-warnings error-suppression

suprimir los mensajes de error de shell script



suppress-warnings error-suppression (6)

Agregando a las respuestas anteriores: es probablemente una mejor idea mantener los mensajes de error (como permiso denegado o algo así). Solo prueba la existencia del archivo antes de borrarlo:

[ -f file.txt ] && rm file.txt

Esto supone un shell como Bourne, por ejemplo, bash. Lo anterior tiene el beneficio adicional de que no intentará eliminar un directorio, algo que rm no puede hacer.

En mi script de shell tengo estas líneas:

rm tempfl.txt rm tempfl2.txt

Si estos no existen me aparecen los mensajes de error:

rm: tempfl2.txt: No such file or directory rm: tempfl.txt: No such file or directory

¿Hay una manera de suprimir estos mensajes solo aunque no siempre aparezcan, ya que los archivos pueden existir?


Como lo indican las otras respuestas, puede usar el command 2> /dev/null para eliminar la salida de error del command

Pero, ¿qué está pasando aquí?

> es el operador utilizado para redirigir la salida. 2 es una referencia a la secuencia de salida de error estándar, es decir, 2> = redirigir la salida de error.

/dev/null es el ''dispositivo nulo'' que simplemente se traga cualquier entrada que se le proporcione. Puede combinar los dos para eliminar efectivamente la salida de un comando.

Referencia completa:

  • > /dev/null tirar stdout
  • 1> /dev/null tirar stdout
  • 2> /dev/null tirar stderr
  • &> /dev/null tirar tanto stdout como stderr

Podemos usar 2> /dev/null para suprimir el error de salida y || true || true para asegurar un estado de salida exitoso:

rm foo => rm: cannot remove ‘foo’: No such file or directory rm foo 2> /dev/null echo $? => 1 rm foo 2> /dev/null || true echo $? => 0

Si está utilizando el comando en un script de shell, makefile, etc., tal vez necesite esto.


Pruebe este comando:

rm -f tempfl.txt

La opción -f actúa así:

-f, --force ignore nonexistent files, never prompt

El comando tampoco informa un código de error distinto de cero en caso de que el archivo no exista.


Tienes dos opciones:

Suprimir rm advertencias

$ rm tempfl.txt 2> /dev/null

Redirigir la salida del script a /dev/null

$ ./myscript.sh 2> /dev/null

Este último tiene el inconveniente de perder todos los demás mensajes de advertencia producidos por su script.


debe redirigir todos los mensajes de error a / dev / null como

rm tempfl2.txt 2> /dev/null