2007年 09月 27日

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 秒かかる。(順番は守られる)