5

プログラムへの入力ファイルにプロセス置換を使用しようとしていますが、機能しません。一部のプログラムでは、入力ファイルのプロセス置換が許可されていないためですか?

以下は機能しません。

bash -c "cat meaningless_name"
    >sequence1
    gattacagattacagattacagattacagattacagattacagattacagattaca
    >sequence2
    gattacagattacagattacagattacagattacagattacagattacagattaca
bash -c "clustalw -align -infile=<(cat meaningless_name) -outfile=output_alignment.aln -newtree=output_tree.dnd"
    (Less verbose output, finishing with:
    No sequences in file. No alignment!

ただし、次のコントロールは機能します。

bash -c "clustalw -align -infile=meaningless_name -outfile=output_alignment.aln -newtree=output_tree.dnd"
    (Verbose output, finishing with:
    CLUSTAL-Alignment file created  [output_alignment.aln]
bash -c "cat <(cat meaningless_name) > meaningless_name2"
diff meaningless_name meaningless_name2
    (No output: the two files are the same)
bash -c "clustalw -align -infile=meaningless_name2 -outfile=output_alignment.aln -newtree=output_tree.dnd"
    (Verbose output, finishing with:
    CLUSTAL-Alignment file created  [output_alignment.aln]

これは、プロセス置換自体は機能するが、clustalw プログラム自体がプロセス置換を好まないことを示唆しています-おそらく、非標準ファイルを作成するか、異常なファイル名のファイルを作成するためです。

プログラムがプロセス置換を受け入れないのは一般的ですか? これが問題であるかどうかを確認するにはどうすればよいですか?

Ubuntu 9.10 で GNU bash バージョン 4.0.33(1)-release (x86_64-pc-linux-gnu) を実行しています。Clustalw はバージョン 2.0.10 です。

4

2 に答える 2

8

プロセス置換は、名前付きパイプを作成します。名前付きパイプをシークすることはできません。

于 2010-11-25T15:07:42.973 に答える
4

はい。他のプログラムでも同じことに気付きました。たとえば、emacs でも動作しません。「ファイルは存在しますが、読み取れません」と表示されます。そして、それは間違いなく私にとって特別なファイルです/proc/self/fd/some_number. また、デフォルト設定では、どちらでも確実に機能しません。lessmost

ほとんどの場合:

most <(/bin/echo 'abcdef')

短くすると何も表示されません。値が長いと先頭が切り捨てられます。 less明らかに動作しますが、指定した場合のみです-f

実際にはzshの方が=はるかに便利だと思います。=の代わりに.を除いて、構文的には同じです<。ただし、一時ファイルを作成するだけなので、サポートはプログラムに依存しません。

編集:

zsh がTMPPREFIX一時ファイル名を選択するために使用することがわかりました。/tmpしたがって、本物を にしたくない場合でもtmpfs、zsh 用にマウントできます。

于 2010-11-25T06:05:06.477 に答える