我想在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 somatic函数需要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
,输出成为体细胞的输入。
答案 0 :(得分:2)
[编辑]我想我现在明白你的问题,如果我错了,请纠正我。
让我们从最简单的示例开始,该示例与您的示例具有相同数量的不同命令行。想象一下,你有三个程序,'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`
虽然`和|之间可能存在一些相互作用这需要一些括号或引用。我实际上并没有尝试过这个。
[剩下的旧东西用于审核]
您的问题对我来说并不完全清楚:您是否清楚自己想要重定向输出还是制定命令行?我怀疑你的意思是后者,因为你谈到了两个参数,而且只有一个标准输入。
如果要从命令输出中制定命令行参数,则要使用的bash语法是反引号'''
例如,要运行一个命令'mycommand',它希望将日期作为命令行参考,你可以使用
mycommand `date`
将运行date命令,并使用该命令的输出作为mycommand的第一个参数。
答案 1 :(得分:0)
可能不是答案,因为我对这个问题缺乏理解:
<击> 我会用
(samtools view -b -u -q 1 $ n_b | samtools pileup -f $ r - ; \
samtools view -b -u -q 1 $ t_b | samtools pileup -f $ r - )\
| java -jar VarScan.v2.2.jar体细胞输出
击>
答案 2 :(得分:0)
我的问题的解决方案可在以下网址找到: