java - 重定向输出以作为命令行的输入?

标签 java perl bash syntax redirect

我想在 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/

相关文章:

linux - 从 Bash 中的 PID 获取 TID 列表

java - 如何根据 TableView 中的行元素自定义表格单元格/表格列内容(JavaFX)

java - 关闭连接后第二次调用PreparedStatement不起作用

sql-server - Perl/DBI/DBD::ODBC 中的自动字符编码处理

bash - pandoc 提示 utf-8 解码错误,即使我的文件是有效的 utf-8 编码文件

linux - 如何使用 hexdump 显示前 x 个字节?

java - 在UML图中表示 volatile 变量

java - 可执行文件.jar - 缺少功能

perl - 如何从 Perl 进行 HTTP 调用?

perl - 如何在 Perl 中从 mongoDB 获取返回的数据?