Ao tentar obter o PID de um comando shell, é possível usar um arquivo de script:
#!/bin/bash
ls -lha &
echo "$!"
No entanto, não é possível usar apenas o terminal.
/bin/bash -c 'ls -lha & ; echo "$!"'
Isso retorna o erro:
/bin/bash: -c: linha 1: erro de sintaxe próximo ao token inesperado `;'
O manual afirma o seguinte:
Uma lista é uma sequência de um ou mais pipelines separados por um dos operadores
;
,&
,&&
, ou||
, e opcionalmente terminados por um de;
,&
, ou<newline>
. Destes operadores de lista,&&
e||
têm precedência igual, seguidos por;
e&
, que têm precedência igual.Uma sequência de uma ou mais novas linhas pode aparecer em uma lista em vez de um ponto e vírgula para delimitar comandos.
Se um comando for encerrado pelo operador de controle
&
, o shell executa o comando em segundo plano em um subshell. O shell não espera o comando terminar, e o status de retorno é 0. Comandos separados por a;
são executados sequencialmente; o shell espera que cada comando termine por vez. O status de retorno é o status de saída do último comando executado.
Então eu também tentei usar nova linha, mas não consegui:
/bin/bash -c 'ls -lha & \n echo "$!"'
Como posso chamar um comando shell para ser executado em segundo plano e obter o PID?
PS: Não usarei ls
command e é um script mais complexo. Este é apenas um exemplo mínimo para reproduzir o problema.