私はこのコードです」コイン「最初:
echo foo | tee >(rev) | ( sleep 1 ; cat ; )
出力:
foo
oof
時間を増やしてもsleep
順序は変わりません。なぜ動作しないのですか?
他のツールに注意してくださいする期待通りに動作し、例えば:echo foo | pee rev 'sleep 1 ; cat'
。
ベストアンサー1
存在する
echo foo | tee >(rev) | (sleep 1; cat)
bash
in と似ていますksh
が、zsh
stdoutrev
もへのパイプという点で異なります(sleep 1; cat)
。
echo
とtee
サブシェルは同時に起動しますが、stdoutに書き込まれますrev
。(...)
tee
foo\n
今後Pipe torev
なので、何があってもパイプはrev
writes の後に作成されるので、oof
最後にのみ配置できます。遅延は発生しません。tee
foo
oof
cat
出力したい場合rev
いいえパイプを通って到達するには、以下を(sleep 1; cat)
使用または実行できますzsh
。
{ echo foo 3>&- | tee >(rev >&3 3>&-) 3>&- | (sleep 1; cat) 3>&-; } 3>&1
この機能には、zsh
次のことができる機能も組み込まれています。tee
multios
echo foo > >(rev) > >(sleep 1; cat)
しかし:
echo foo > >(rev) | (sleep 1; cat)
の出力がrev
通過しますcat
(混乱してもこの場合は通過しませんecho foo >(echo bar) | (sleep 1; cat)
)。