トップ «前の日(10-09) 最新 次の日(10-11)» 追記   RSS 1.0 FEED  

Journal InTime


2001-10-10 (Wed)

_ 記事

記事のページを更新しました。

<URL:http://www.shugo.net/article/>


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 [ご指摘ありがとうございます。件の箇所は、引数がreadableかどうかとdirかどうかをチェックするように直しておこ..]

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