¿Qué ;
significa en scripts de una sola línea como este?
while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &
¿Significa nueva línea o "siguiente comando"?
Respuesta1
Es un separador de comandos. Aunque en primera instancia sería mejor pensar que es el final de la while
declaración.
Por ejemplo, si quisieras hacer un bucle mientras algún comando devuelve éxito, harías algo como
while test -f /foo; do some_command; done`
El punto y coma se utiliza para indicar el final de los argumentos de test
. De lo contrario se pensaría que do
es otro argumento más test
.
Sin embargo, puede utilizar nuevas líneas en lugar de punto y coma. Lo siguiente sería exactamente equivalente al ejemplo anterior, solo que sin punto y coma
while test -f /foo
do
some_command
done
De hecho, con bash, si ejecuta el comando anterior y luego de que finaliza (o presiona CTRL+C), si retrocede en el historial (teclas de flecha hacia arriba o cualquier otra cosa), notará que reemplaza la línea múltiple. comando con uno que use punto y coma en su lugar.
Entonces sí, la sintaxis para cosas como if
y while
rompe el comportamiento normal del shell.
Personalmente, siempre he pensado que la sintaxis es extraña, ya que do
parece extraño. Pero te acostumbras a ello.