주어진
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
포탄은 그것을하기 위해 2 개의 포크를 만들어야하는 경향이 있습니다.
strace-f(){ strace -f "$@" 2>&1; };
for sh in dash bash zsh ksh; do
printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c;
done
ksh
영웅적으로 제외 하면 한 번만 포크하지 않고 만듭니다.
dash 2
bash 2
zsh 2
ksh 0
어떻게합니까?
편집하다:
던져진 파이프로 내려가는 방법은 다음과 같습니다.
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
산출:
dash 11
bash 10
zsh 5
ksh 3
ksh
설치 했습니까? 코드를 실행할 때 0
설치하지 않은 쉘을 얻 습니다.