world - shell script linux español




¿Cuál es el significado de a! antes de un comando en el shell? (2)

La pregunta está en el título. ¿Cuál es el propósito de un comando de shell (parte de un script de shell) que comienza con un signo de exclamación? Ejemplo concreto:

En foo.sh:

#!/usr/bin/env bash
set -e
! docker stop foo
! docker rm -f foo
# ... other stuff

Sé que sin el espacio, el signo de exclamación se usa para reemplazar la historia y ! <expression> ! <expression> acuerdo con la página del manual se puede utilizar para evaluar " Verdadero si expr es falso ". Pero en el contexto de ejemplo eso no tiene sentido para mí.


"!" Significa "no", así que cuando lo coloca antes de un comando y ejecuta "$?" Se hará eco de un 1. Lo que significa que falló en lugar de un 0, lo que significa éxito.


Si no desea que el script falle en ambos casos, error o éxito del comando, también puede usar esta alternativa:

set -e
docker stop foo || true

El valor booleano o verdadero hace que la canalización siempre tenga 0 como valor de retorno.





sh