shell: combina ponto-e-vírgula e e comercial em bash / sh

3
[root@localhost tmppcm]# ls ; echo exit code was: $? & echo pid is: $!
test.txt
..
....
.....
......
lastfile.txt
[1] 1265
pid is: 1265
exit code was: 0

Acima, é como ele executa ls para começar, e então termina executando o eco em 'paralelo'.

Não é bem o que eu quero. Eu gostaria que a seqüência ls e echo exit code was: $? fosse executada em segundo plano, e a identificação do processo de eco em 'paralelo'.

Uma solução pode ser usar || em vez de ; entre ls e echo exit code was :

[root@localhost tmppcm]# ls || echo exit code was: $? & echo pid is: $!
[1] 1271
pid is: 1271
test.txt
..
....
.....
......
lastfile.txt
exit code was: 0

Existe uma maneira mais inteligente de fazer isso com a combinação A ; B & C que estou perdendo?

    
por softbear 20.11.2015 / 15:50

1 resposta

6

Nesse caso, você deseja usar grupos de comandos . Como você quer que alguns sejam executados em segundo plano, usaremos a variedade () para que eles recebam sua própria subcaixa. Você pode agrupar os comandos com os parens e, em seguida, colocar esse grupo (e seu subshell) no plano de fundo, como:

( A; B ) & C

ou neste exemplo específico:

(ls ; echo exit code was: $?) & echo pid is: $!
    
por 20.11.2015 / 16:02

Tags