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