linux - script - Bash ignorando el error de un comando en particular
programacion shell linux ejemplos (6)
Estoy usando las siguientes opciones
set -o pipefail
set -e
En bash script para detener la ejecución en caso de error. Tengo 100 de ejecución de script y no quiero verificar el código de retorno del script. Pero para un script en particular quiero ignorar el error. Cómo puedo hacer eso ?
En caso de que quiera que su script no se detenga si falla un comando en particular y también desea guardar el código de error del comando fallido:
código
set -e;
command || EXIT_CODE=$? && true ;
echo $EXIT_CODE
En lugar de "devolver verdadero", también puede usar la utilidad "noop" o nula (como se menciona en las especificaciones POSIX ) :
y simplemente "no hacer nada". Ahorrarás unas cuantas cartas. :)
#!/usr/bin/env bash
set -e
man nonexistentghing || :
echo "It''s ok.."
He estado utilizando el fragmento de código a continuación cuando trabajo con herramientas de CLI y quiero saber si existe algún recurso o no, pero no me importa el resultado.
if [ -z "$(cat no_exist 2>&1 >/dev/null)" ]; then
echo "none exist actually exist!"
fi
La solución:
particular_script || true
Ejemplo:
$ cat /tmp/1.sh
particular_script()
{
false
}
set -e
echo ein
particular_script || true
echo zwei
particular_script
echo drei
$ bash /tmp/1.sh
ein
zwei
drei
nunca será impreso.
Además, quiero agregar que cuando pipefail
está pipefail
, es suficiente para que Shell piense que toda la tubería tiene un código de salida distinto de cero cuando uno de los comandos en la tubería tiene un código de salida distinto de cero (con pipefail
desactivada debe ser la última uno).
$ set -o pipefail
$ false | true ; echo $?
1
$ set +o pipefail
$ false | true ; echo $?
0
Más concisamente:
! particular_script
De la especificación POSIX con respecto a set -e
(énfasis mío):
Cuando esta opción está activada, si un comando simple falla por alguna de las razones enumeradas en Consecuencias de los errores de Shell o devuelve un valor de estado de salida> 0, y no forma parte de la lista compuesta después de un tiempo, hasta, o si es una palabra clave, y no es parte de una lista AND u OR, y no es una canalización precedida por! palabra reservada , entonces la concha saldrá inmediatamente.
Solo agrega || true
|| true
después del comando donde desea ignorar el error.