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 $!
当我运行时./outer.sh
,会打印出来:
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
既然COPROC
并COPROC_PID
没有设置在孩子身上,它怎么知道来自父母的那个能够给我这个警告?
此外,我发现如果我添加#!/bin/bash
到顶部inner.sh
,或者如果我调用bash ./inner.sh
而不是仅仅./inner.sh
from outer.sh
,那么警告就会消失。为什么这会改变任何东西,因为无论哪种方式都使用 bash 子进程运行?