場合によっては、プロセスの置換が期待どおりに機能しません。以下に例を示します。
入力:
gcc <(echo 'int main(){return 0;}')
出力:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
入力:
ただし、別のコマンドで使用すると、期待どおりに機能します。
grep main <(echo 'int main(){return 0;}')
出力:
int main(){return 0;}
私は他のコマンドで同様の失敗に気づきました(つまり、プロセス置換からのファイルを期待するコマンドは使用できない/dev/fd/63
か、類似しています)。この障害gcc
は最新のものです。プロセスの置換がこの方法で失敗し、使用すべきでないときを判断するために知っておくべき一般的なルールはありますか?
Ubuntu 12.04でこのBASHバージョンを使用しています(archおよびdebianでもこれを見ました):
GNU bash、バージョン4.3.11(1)-release(i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
(言語をC
明示的に設定します)。
illegal seek
その答えのように見える-|pipe
それbash
に実行されるプログラムを指すが、シーク可能ファイルではありません。おそらくあなたがecho data | command /dev/fd/0
プログラムでうまくいかないなら、あなたは同様の運w /を持っているでしょう<(cmd)
。ディスク上のファイルは提供しません-パイプファイル記述子を指す引数に置き換えるだけです。