tutorial script programas programacion espaƱol ejemplos bourne again linux bash

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.