这是命令:
{ ( echo "to stdout"; echo "to stderr" >&2 ) > >(sleep 1; tee stdout.txt); } 2> >(sleep 2; tee stderr.txt >&2 )
这就是我所看到的:
zsh
% { ( echo "to stdout"; echo "to stderr" >&2 ) > >(sleep 1; tee stdout.txt); } 2> >(sleep 2; tee stderr.txt >&2 )
to stdout
to stderr
%
重击
$ { ( echo "to stdout"; echo "to stderr" >&2 ) > >(sleep 1; tee stdout.txt); } 2> >(sleep 2; tee stderr.txt >&2 )
$ to stdout
to stderr
请注意, bash$
在输出完成之前写入它的提示,但 zsh 在提示用户之前等待替换的进程完成%
。
我想一个合理的答案可能是“因为这就是 zsh 的工作方式”,但我想知道这是否记录在任何地方,以便我可以了解更多信息。作为许多 bash 用户中的 zsh 用户,我尝试了解差异,以便知道当我说“嘿,运行这个命令”时会发生什么。
(相关问题:https ://stackoverflow.com/a/53051506/1054322 )