我需要运行两个命令。第一个命令创建一个文件,该文件作为第二个命令的输入参数。可以按以下方式运行:
$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3
< p >在cmd2
上使用-i
参数需要一个文件名。有没有一种方法可以在不创建tmp.txt
文件的情况下在一行中完成这个操作?< /p >
我需要运行两个命令。第一个命令创建一个文件,该文件作为第二个命令的输入参数。可以按以下方式运行:
$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3
< p >在cmd2
上使用-i
参数需要一个文件名。有没有一种方法可以在不创建tmp.txt
文件的情况下在一行中完成这个操作?< /p >
尝试使用“进程替换”(这是Bash手册的称呼)
cmd2 -i <(cmd1 p1 p2) p3
这个方法也可以反过来使用:
cmd2 -o >(cmd1 p1 p2) p3
cmd1 p1 p2|xargs cmd2 p3 -i
xargs将调用cmd2
并将其自身的stdin(即cmd1的输出)转换为cmd2的命令行参数。
cmd1
的输出用作文件名。 - Carl Norum