Usando o operador bash “&” com delineador “;”? [duplicado]

5

Estou tentando escrever um comando que é um loop de uma linha contendo um comando que usa o & operador para colocar o comando em segundo plano:

for dir in $(ls); do command $dir &; done

Em que & informa ao BASH para executar command no plano de fundo. Ainda BASH retorna

bash: syntax error near unexpected token ';'

O que está acontecendo aqui? Como posso usar & em conjunto com ; ? Eu tentei colocar as coisas entre aspas, como do "command $dir &" ou do command $dir "&" , mas elas têm resultados inesperados.

    
por Jonathan 24.01.2014 / 23:32

1 resposta

9

Você não usa o ; com '&', o '&' por conta própria é suficiente para terminar o comando. Eu acredito que atualmente não há menção a esse comportamento no manual. Seu loop seria simplesmente:

for dir in $(ls); do command $dir & done

Além disso, você deve considerar o uso de glob, em vez de $(ls) , que falhará se o nome do arquivo contiver espaço em branco. Você pode definir nullglob para impedir que dir seja um * se não houver arquivos:

shopt -s nullglob
for dir in *; do command $dir & done
    
por 24.01.2014 / 23:34

Tags