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
xen 10 pero que esa configuración se olvida antes de que seechoejecute el comando:Con llaves, por el contrario,
x=10se 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