【问题标题】:How to use the output of a command as an input to other program in linux?如何使用命令的输出作为 linux 中其他程序的输入?
【发布时间】:2014-04-29 09:54:32
【问题描述】:

我有一个在 linux 上运行的程序

这个程序从标准输入获取输入

所以我可以通过这种方式使用输入文件启动它

myprogram < file

为了避免在程序中输入输入

现在我希望程序从命令输出中获取输入。类似的东西

myprogram < anycommand

但这不起作用,因为它需要一个文件而不是命令。

我怎样才能让它发挥作用?有没有一种 shell 语法可以让它工作?

注意:我不能像anycommand | myprogram那样使用管道

【问题讨论】:

  • 最好解释一下为什么不能使用anycmd| myprog?这是所有类 Unix 程序的核心模式。祝你好运。

标签: linux shell ash


【解决方案1】:

通常(恕我直言)myprogramfile 一无所知。 bash 启动myprogram 并读取文件,并将file 的内容写入myprogram 的stdin。 所以 myprogram 不应该知道他的标准输入是一个文件。 所以,任意命令 |我的程序 必须工作。

如果它不适用于 ash,也许你可以制作一个命名管道 (mkfifo /tmp/testpipe) 现在您可以使用myprogram &lt; /tmp/testpipe 启动您的程序,您可以将输入写入/tmp/testpipe

【讨论】:

    【解决方案2】:

    在我的 Linux 系统上,ash 是指向 dash 的符号链接,并且可以很好地处理管道:

    pax> ls -ld $(which ash)
    lrwxrwxrwx 1 root root 4 Mar  1  2012 /bin/ash -> dash
    
    pax> ash
    
    $ echo hello | tr '[a-z]' '[A-Z]'
    HELLO
    

    所以我会再给anycommand | myprogram 一个机会以防万一。

    如果您的 ash 具有 no 管道功能,您可以随时恢复使用临时文件,前提是 anycommand 不是您需要处理 in 输出的长期进程渐进式时尚:

    anycommand >/tmp/tempfile
    myprogram </tmp/tempfile
    

    【讨论】:

      【解决方案3】:

      你需要这样使用它:

      myprogram < <(anycommand)
      

      这叫process substitution

      【讨论】:

      • 感谢您的回答。我试过你的命令,但它返回以下错误:-ash: syntax error: unexpected redirection
      • 我不确定ash是否支持这个,你可以使用bash吗?
      • 我没有办法在ash 中测试它,因为我没有它。有这方面的在线测试人员吗?
      • 我查看了linux.about.com/library/cmd/blcmdl1_ash.htm 并没有找到任何进程替换。你试过了吗:anycommand|myprogram?你遇到了什么错误?
      猜你喜欢
      • 2015-04-09
      • 1970-01-01
      • 2010-10-02
      • 2011-12-04
      • 2011-09-13
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多