我正在尝试对程序的输入文件使用进程替换,但它不起作用。是因为某些程序不允许进程替换输入文件吗?
以下不起作用:
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 版。