トップ «前の日記(2005-09-29 (Thu)) 最新 次の日記(2005-10-12 (Wed))» 編集   RSS 1.0 FEED  

Journal InTime


2005-10-10 (Mon) [長年日記]

_ DocDiffとパイプとzshの<()

SVKの作業ディレクトリでDocDiffを次のように実行したらエラーになってしまった。

$ docdiff --tty <(svk cat foo.txt) foo.txt | lv -c
/usr/bin/docdiff:297: /proc/self/fd/18 is not a file. (RuntimeError)

とりあえず、297行目の以下の2行をコメントアウトしたらうまく動いた。

raise "#{ARGV[0]} is not a file." unless FileTest.file?(ARGV[0])
raise "#{ARGV[1]} is not a file." unless FileTest.file?(ARGV[1])

それはそれとして、zshの<()記法って/proc/self/fd以下のファイルを渡してた のね。なるほど。

Linux以外のシステムではどうやるんだろ、と思ってmanを見ると、

If the system supports the /dev/fd mechanism, the command argument is the name of the device file corresponding to a file descriptor; otherwise, if the system supports named pipes (FIFOs), the command argument will be a named pipe.

[zshexpn(1)より引用]

ふむふむ、/dev/fd*1というものがあるのか。 なかったら名前付きパイプを使うんだね、なるほど。

*1  Linuxでは/proc/self/fdへのsymlinkみたい。/dev/fdって何かフロッピーディスクと間違えそうだな。

本日のツッコミ(全2件) [ツッコミを入れる]
_ hisashim (2005-10-10 (Mon) 13:17)

ご指摘ありがとうございます。件の箇所は、引数がreadableかどうかとdirかどうかをチェックするように直しておこうと思います。<br>ところで、zshであれば、 <() の代わりに =() を使ってとりあえず回避するという手もありそうですね。

_ shugo (2005-10-10 (Mon) 16:19)

ちゃんと報告しなくてすみません、よろしくお願いします。<br>=()ならだいじょうぶそうですね。