我想在 bash 脚本中运行以下代码:
java -jar VarScan.v2.2.jar somatic < samtools view -b -u -q 1 $n_b \
| samtools pileup -f $r - < samtools view -b -u -q 1 $t_b \
| samtools pileup -f $r - output
其中 $n_b 和 $t_b 是文件。
java 体细胞函数有 2 个参数。所以
samtools view -b -u -q 1 $n_b | samtools pileup -f $r
是参数之一,
samtools view -b -u -q 1 $t_b | samtools pileup -f $r
是另一个参数。这两个参数本身都是可执行的。
所以我想要的是
samtools view -b -u -q 1 $n_b | samtools pileup -f $r -
先执行再执行
samtools view -b -u -q 1 $t_b | samtools pileup -f $r
输出成为体细胞的输入。
最佳答案
[编辑]我想我现在明白你的问题了,如果我错了,请纠正我。
让我们从最简单的示例开始,该示例具有与您的示例相同数量的不同命令行。假设您有三个程序:“somatic”、“samtools1”和“samtools2”。 somatic 采用两个参数,而 samtools1 和 samtools2 不采用任何参数。
让我们进一步想象一下,当运行 samtools1 时,它会生成一个单词“output1”。同样,让我们想象一下,当运行 samtools2 时,它会产生一个单词“output2”。然后您想运行命令
somatic output1 output2
作为命令行。
实现这一点的方法是
somatic `samtools1` `samtools2`
不涉及重定向。
或者详细地讲,使用你原来的例子,比如
java -jar VarScan.v2.2.jar somatic `samtools view -b -u -q 1 $n_b | samtools pileup -f $r -` `samtools view -b -u -q 1 $t_b | samtools pileup -f $r - output`
尽管 ` 和 | 之间可能存在一些相互作用这需要一些括号或引号。我实际上还没有尝试过运行这个。
[留下审核的旧内容]
我不太清楚你的问题:你清楚你是想重定向输出还是制定命令行吗?我怀疑你的意思是后者,因为你谈论了两个参数,并且只有 1 个标准输入。
如果您想根据命令的输出制定命令行参数,则要使用的 bash 语法是反引号 '`'
例如,要运行需要日期作为其命令行参数的命令“mycommand”,您可以使用
mycommand `date`
它将运行 date 命令,并使用该命令的输出作为 mycommand 的第一个参数。
关于java - 重定向输出以作为命令行的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324700/