Executei o seguinte código:
echo $$
# Output : 3911
true | while true; do
eval 'echo $$'
break
done
# Output : 3911
A documentação diz que enquanto o loop (envolvido no pipe) é executado em um subprocesso, nesse caso, os dois ids de processo devem ser diferentes?
O valor de
$$
inbash
permanecerá o mesmo mesmo se você estiver examinando-o em um subshell. Esse comportamento é obrigatório pelo padrão POSIX :Você provavelmente deveria estar usando
$BASHPID
em vez disso. O seguinte é dobash
manual:Reescrevendo seu código para usar
$BASHPID
em vez disso:Executar isso produzirá dois PIDs diferentes.