zsh のプロセス置換 =() と <() の違い
/dev/fd とかつかうのが < で、常に tmpfile つかうのが =、でいいのかな。一応 man よんだけど英語わかんね
これは例えば lv だと違いが顕著
$ lv <(date) FileStretch(): Illegal seek exit 255 $ ls -altr <(date) prw-rw---- 1 cho45 cho45 28 9 27 02:50 /dev/fd/12 # Mac OSX lr-x------ 1 cho45 cho45 64 2007-09-27 02:51 /proc/self/fd/11 -> pipe:[2297610] # ubuntu Linux $ lv =(date) # ちゃんとみれる $ ls -altr =(date) -rw------- 1 cho45 wheel 28 9 27 02:51 /tmp/zsh0WJFb7
あと非同期かどうかも関係あるっぽい
$ cat =(date) =(sleep 5) =(date) =(sleep 10) =(date) 木 9 27 03:59:16 JST 2007 木 9 27 03:59:21 JST 2007 木 9 27 03:59:31 JST 2007 $ cat <(date) <(sleep 5) <(date) <(sleep 10) <(date) 木 9 27 03:59:54 JST 2007 木 9 27 03:59:54 JST 2007 木 9 27 03:59:54 JST 2007
前者は 15 秒かかったあと全部一気にでてくる。
後者は随時出力されながら、総合で 10 秒かかる。(順番は守られる)