Qual é o uso de; em um comando de linha única?

1

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"?

    
por Danijel-James W 05.10.2013 / 08:13

1 resposta

2

É um separador de comandos. Embora no primeiro caso, talvez seja melhor pensar nisso como terminar a declaração while .

Por exemplo, se você quisesse fazer um loop enquanto algum comando retornasse 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 do é outro argumento para test .

No entanto, você pode usar novas linhas em vez do ponto-e-vírgula. O seguinte seria exatamente equivalente ao exemplo acima, apenas sem nenhum 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 você CTRL + C), se você voltar no histórico (teclas de seta para cima ou outros), você perceberá que ele substitui o comando multi-line com um usando ponto e vírgula.

Então, sim, a sintaxe de coisas como if e while quebra o comportamento normal do shell.
Eu pessoalmente sempre achei que a sintaxe é estranha, pois o do parece estranho. Mas você se acostuma com isso.

    
por 05.10.2013 / 08:38