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).