sh - utiliza - guión doble punto y coma(;;) sintaxis
signos ortograficos (2)
Intenté encontrar la manera de ejecutar varios comandos en paralelo en sh
y esperar a que se complete. Descubrí que lo siguiente no funciona ( sh: 1: Syntax error: ";" unexpected
):
sh -c ''(sleep 3 && echo 1) & ; (sleep 3 && echo 2) & ; wait''
Pero esta sintaxis funciona como se esperaba:
sh -c ''(sleep 3 && echo 1) & ;; (sleep 3 && echo 2) & ;; wait''
Pero no entiendo cuál es la diferencia. Mi pregunta es cuál es el significado de ;;
¿Y cuándo se debe utilizar?
Se debe utilizar en una declaración de case
, entre casos. El problema que tienes aquí es que tanto &
como ;
son separadores de comando, y solo deberías usar uno de ellos.
;;
solo se utiliza en construcciones de case
, para indicar el final de una alternativa. (Está presente donde tienes break
en C.)
case $answer in
yes) echo ''yay!'';;
no) echo ''boo!'';;
esac
Sintácticamente ;
y &
ambos marcan el final de un comando. Una nueva línea es equivalente a ;
, en una primera aproximación. La diferencia entre ellos es que o nueva línea indica que el comando debe ejecutarse en primer plano, mientras que &
indica que el comando debe ejecutarse en segundo plano.
Así que aquí necesitas & wait
. & ;
es un error de sintaxis (no puede tener un comando vacío). & ;;
También es un error de sintaxis; ash lo deja ir (como si solo hubieras escrito &
), pero bash se queja. Evidentemente, su sh es una variante de ceniza (como dash, que es /bin/sh
en muchos derivados de Debian).