【问题标题】:How do I avoid the need to create a temporary file to run two commands from a bash shell?如何避免需要创建一个临时文件来从 bash shell 运行两个命令?
【发布时间】:2011-12-30 17:26:05
【问题描述】:

我需要运行两个命令。第一个创建一个文件,用作第二个的输入参数。我可以这样跑:

$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3 

cmd2 上的 -i 参数采用文件名。有没有一种方法可以在不创建 tmp.txt 文件的情况下在一行中执行此操作?

【问题讨论】:

    标签: bash unix command-line


    【解决方案1】:

    尝试“进程替换”(这就是 Bash 手册所说的)

    cmd2 -i <(cmd1 p1 p2) p3
    

    这也适用于其他方式:

    cmd2 -o >(cmd1 p1 p2) p3
    

    【讨论】:

    • 是的!谢谢马丁。这只是 bash 功能还是其他 shell 也支持这种功能?
    • 我认为这种语法可能仅限于 bash。也许像 zsh 这样的 shell 也支持它。
    • @stand:这个语法是 bash。其他 shell 可能支持类似的功能
    【解决方案2】:
    cmd1 p1 p2|xargs cmd2 p3 -i
    

    xargs 将调用cmd2 并将其自己的标准输入(cmd1 的输出)转换为 cmd2 的命令行参数。

    【讨论】:

    • OP希望避免创建临时文件,而不是使用cmd1的输出作为文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2022-07-12
    • 2012-05-03
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多