0

我是 Perl 初学者。我有这个 Perl 片段

$normal_pileup = "samtools mpileup -q 1 -f XXXX YYYYY";
$tumor_pileup = "samtools mpileup -q 1 -f XXXX ZZZZZ";

bash -c \"java -jar ttt.jar  <\($normal_pileup\) <\($tumor_pileup\) output

他们尝试发出一个系统调用,将这些命令的输入通过管道传输到 Java 程序中。我无法让它工作。谁能告诉我该怎么做?

4

2 回答 2

2

您不能直接从 Perl 调用 bash。但是,如果您使用system, /bin/sh 将被调用,这可能不支持进程替换。

一种可能的解决方法是

system qq(echo 'java -jar ttt.jar  <($normal_pileup) <($tumor_pileup) output' | bash);
于 2012-08-29T09:52:42.043 回答
1
$normal_pileup = "samtools mpileup -q 1 -f XXXX YYYYY";

不会执行任何命令,只会存储samtools mpileup -q 1 -f XXXX YYYYY为字符串。对于$tumor_pileup.

如果要执行命令使用

$normal_pileup = `samtools mpileup -q 1 -f XXXX YYYYY`;

bash不是 Perl 命令。

`java -jar ttt.jar  ...`

你“java”也很可能是错的

  • <您一起指定读取 STDIN 的位置。应该是一个文件,但在您的情况下,您要指定上一个命令的输出。这仅在输出samtool是文件名时才有效。

  • 如果您希望您的 java 程序处理另一个命令的输出,您将需要一个管道

    mycommand | java
    

总结一下,我想你想要

` ( samtools mpileup -q 1 -f XXXX YYYYY; samtools mpileup -q 1 -f XXXX ZZZZZ ) | java -jar ttt.jar output `
于 2012-08-29T09:18:12.687 回答