outer.sh
:
ls -l /proc/$$/exe
coproc cat
./inner.sh
kill $!
inner.sh
:
ls -l /proc/$$/exe
set | grep COPROC || echo No match found
coproc cat
kill $!
Quando executo ./outer.sh
, isso é impresso:
lrwxrwxrwx 1 joe joe 0 Jun 16 22:47 /proc/147876/exe -> /bin/bash
lrwxrwxrwx 1 joe joe 0 Jun 16 22:47 /proc/147879/exe -> /bin/bash
No match found
./inner.sh: line 3: warning: execute_coproc: coproc [147878:COPROC] still exists
Já que COPROC
e COPROC_PID
não estão definidos na criança, como ele sabe sobre o do pai para poder me dar esse aviso?
Além disso, descobri que, se eu adicionar #!/bin/bash
ao topo de inner.sh
, ou se eu chamar bash ./inner.sh
em vez de apenas ./inner.sh
de outer.sh
, o aviso desaparecerá. Por que isso muda alguma coisa, já que está sendo executado com um subprocesso bash de qualquer maneira?