O que ;
significa em scripts de linha única como este:
while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &
Significa nova linha ou "próximo comando"?
Responder1
É um separador de comandos. Embora, em primeiro lugar, seja melhor pensar nisso como um encerramento da while
declaração.
Por exemplo, se você quisesse fazer um loop enquanto algum comando retorna sucesso, você faria algo como
while test -f /foo; do some_command; done`
O ponto e vírgula é usado para indicar o final dos argumentos para test
. Caso contrário, pensaria que esse do
é outro argumento para test
.
No entanto, você pode usar novas linhas em vez de ponto e vírgula. O seguinte seria exatamente equivalente ao exemplo acima, apenas sem ponto e vírgula
while test -f /foo
do
some_command
done
Na verdade, com o bash, se você executar o comando acima e depois que ele terminar (ou CTRL + C), se você voltar no histórico (teclas de seta para cima ou outros enfeites), notará que ele substitui o multi-linha comando com um usando ponto e vírgula.
Então, sim, a sintaxe para coisas como if
quebrar while
o comportamento normal do shell.
Pessoalmente, sempre achei a sintaxe estranha, pois do
parece estranha. Mas você se acostumar com isso.