かなり前からそうで、マイナーバグだと思っていたのだが、今のバージョンでも起こるようだ。どこかに報告したほうがよいだろうか? zshで
# cat =(df)
としてみてほしい。zshが戻ってこなくなる。ずっとRunning状態のまま。不思議なのは、cat =(df -T)
だとOKだったりすることだ。
私はこの現象を説明できる気がしない。
zshを知らない人のためのメモ。=(cmd)
というのはcmdの標準出力をテンポラリファイルに書き込んでファイル名を返します。なので、cat =(cmd)
というのはcmdの標準出力をテンポラリファイルに書き込んで、catの引数にテンポラリファイルの名前を与えます。viとかは標準入力を編集できなかったりするし、複数のコマンドを書けるので、2つのコマンドの出力のdiffをとったりするときにものスゴく便利ですよ!!
テンポラリファイルは当然のように勝手に消えます。偉い。
(追記) 2004-04-12 21:21
そうだ思い出した。=(cmd)
を一番使うのはnetpbmを使うときだ。
pnmcat -lr =(jpegtopnm hoge1.jpg) =(jpegtopnm hoge2.jpg) =(pngtopnm hoge3.png)
とかって。生活の知恵だ。良い子のみんなは覚えておこうね。
(追記) 2004-05-07 14:22
思いついてdfのaliasを解いてcat =(df)
をやったらちゃんと戻ってきた。なんなんだろう。=(cmd)
の中ではaliasが無限ループしてんのかな。私のdfはなんとなく以下のようにaliasしてある。
# alias
C='LC_ALL=C LANG=C'
df='C df'