Hasta donde sé, usar &
después del comando es para ejecutarlo en segundo plano.
Ejemplo de &
uso:tar -czf file.tar.gz dirname &
¿Pero qué tal &&
? (mira este ejemplo: /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
bash
shell
command-line
syntax
Capitán
fuente
fuente
false && echo "Will not be printed"
.Concha, cuando veas
la intención es ejecutar el comando que sigue al
&&
único si el primer comando es exitoso. Esto es idiomático de los proyectiles Posix, y no solo se encuentra en Bash.Tiene la intención de evitar la ejecución del segundo proceso si el primero falla.
Puede notar que he usado la palabra "intención", eso es por una buena razón. No todos los programas tienen el mismo comportamiento, por lo que para que esto funcione, debe comprender lo que el programa considera un "error" y cómo lo maneja leyendo la documentación y, si es necesario, el código fuente.
Su shell considera un valor de retorno de 0 para verdadero, otros números positivos para falso
Los programas devuelven una señal al salir. Deberían devolver 0 si salen con éxito, o mayor que cero si no lo hacen. Esto permite una cantidad limitada de comunicación entre procesos.
Se
&&
hace referencia a esto comoAND_IF
en la gramática de shell posix , que forma parte de unaand_or
lista de comandos, que también incluye el||
cual esOR_IF
con una semántica similar.Símbolos gramaticales, citados de la documentación:
Y la Gramática (también citada de la documentación), que muestra que cualquier número de
AND_IF
s (&&
) y / oOR_IF
s (||
) se pueden unir (comoand_or
se define de forma recursiva):Ambos operadores tienen la misma precedencia y se evalúan de izquierda a derecha (se dejan asociativos). Como dicen los documentos:
En el primer caso, el falso es un comando que sale con el estado de
1
lo que significa
echo foo
que no se ejecuta (es decir, cortocircuitoecho foo
). Entoncesecho bar
se ejecuta el comando .En el segundo caso, salidas verdaderas con un código de
0
y por
echo foo
lo tanto no se ejecuta, luegoecho bar
se ejecuta.fuente
Un uso bastante común para '&&' es compilar software con autotools. Por ejemplo:
Básicamente, si la configuración tiene éxito, make se ejecuta para compilar, y si eso tiene éxito, make se ejecuta como root para instalar el programa. Lo uso cuando estoy casi seguro de que las cosas funcionarán, y me permite hacer otras cosas importantes como mirar stackoverflow y no 'monitorear' el progreso.
A veces me dejo llevar ...
Hago esto cuando, por ejemplo, hago un linux desde cero.
fuente
set -o errexit
para Bash.&&
cadenas de comandos juntos. Los comandos sucesivos solo se ejecutan si los anteriores tienen éxito.Del mismo modo,
||
permitirá que el comando sucesivo se ejecute si falla el precedente.Ver Programación de Bash Shell .
fuente
Mira el ejemplo:
Shell intentará crear un directorio
test
y luego, solo si fue exitoso , intentará crear un archivo dentro de él.Por lo tanto, puede interrumpir una secuencia de pasos si uno de ellos falla.
fuente
Es ejecutar una segunda declaración si la primera termina exitosamente. Como una declaración if:
Sus primeros intentos si 1 == 1, si eso es cierto, comprueba si 2 == 2
fuente
&&
if
funcionan las pruebas en bash. Nunca lo pensé como una cadena de comandos de comparación, rompiendo cuando alguno de ellos fallaba. Así que tienes mi||
, para encadenar comandos hasta que uno de ellos tenga éxito:eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
: ejecuta command_2 solo cuando command_1 se ejecuta con éxito.command_1 || command_2
: ejecuta command_2 solo cuando command_1 no se ejecuta correctamente.Se siente similar a cómo se ejecuta una condición 'si' en un lenguaje de programación convencional, como, en la
if (condition_1 && condition_2){...}
condición_2 se omitirá si la condición_1 esfalse
y en laif (condition_1 || condition_2){...}
condición_2 se omitirá si la condición_1 estrue
. Mira, es el mismo truco que usas para codificar :)fuente
Cuando el programa verifica si el comando, el programa crea un número llamado código de salida, si ambas condiciones son verdaderas, el código de salida es cero (0), de lo contrario, el código de salida es un número positivo. solo cuando se visualiza Equal si el código de salida se genera cero (0), eso significa que ambas condiciones son verdaderas.
fuente
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi