He leído sobre && y || y me gustaría ejecutar dos comandos en el caso falso.
Lo he intentado ;
pero eso siempre funciona . He intentado ponerlo entre llaves { command1; command2 }
pero eso produce un error de sintaxis.
Quiero hacer algo como
command && echo "Ok, continuing" || echo "Check internet connection"; exit 1
que solo sale si no hay conexión a Internet.
command-line
bash
Thomas Weller
fuente
fuente
()
y{}
.Respuestas:
El uso de parens coloca los comandos en una subshell que no siempre es lo que desea. Alternativamente, use llaves:
El truco aquí es que, a diferencia de los parens, el comando final entre llaves debe ser seguido por
;
.Por qué se requiere un punto y coma o una nueva línea
Una llave rizada es un argumento válido para un comando. Por ejemplo, aquí hay una llave rizada como argumento para
echo
:En consecuencia, si el shell ve:
El shell interpreta que command1 no tiene argumentos y command2 tiene un argumento que consiste en el carácter
}
. Una llave rizada}
solo se interpreta como cierre de una agrupación si sigue un punto y coma o una nueva línea. Para hacer que lo anterior funcione:Subcapas y la diferencia entre
{...}
y(...)
Observe que lo siguiente se establece
x
en 10 pero que esa configuración se olvida antes de que seecho
ejecute el comando:Con llaves, por el contrario,
x=10
se recuerda la configuración de :La diferencia se debe a que las asignaciones variables en una subshell no sobreviven una vez que se completa la subshell.
Documentación
De
man bash
:fuente