【发布时间】:2011-12-30 17:26:05
【问题描述】:
我需要运行两个命令。第一个创建一个文件,用作第二个的输入参数。我可以这样跑:
$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3
cmd2 上的 -i 参数采用文件名。有没有一种方法可以在不创建 tmp.txt 文件的情况下在一行中执行此操作?
【问题讨论】:
标签: bash unix command-line
我需要运行两个命令。第一个创建一个文件,用作第二个的输入参数。我可以这样跑:
$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3
cmd2 上的 -i 参数采用文件名。有没有一种方法可以在不创建 tmp.txt 文件的情况下在一行中执行此操作?
【问题讨论】:
标签: bash unix command-line
尝试“进程替换”(这就是 Bash 手册所说的)
cmd2 -i <(cmd1 p1 p2) p3
这也适用于其他方式:
cmd2 -o >(cmd1 p1 p2) p3
【讨论】:
cmd1 p1 p2|xargs cmd2 p3 -i
xargs 将调用cmd2 并将其自己的标准输入(cmd1 的输出)转换为 cmd2 的命令行参数。
【讨论】:
cmd1的输出作为文件名。