在Linux下使用bash脚本将C程序的输出重定向到另一个C程序

时间:2011-12-21 17:36:38

标签: linux bash shell scripting

我编写了两个简单的C程序,program1打印出一个预定义的字符串,program2将一个字符串作为参数,并将该字符串写入文件。

我要做的是获取program1的输出并将其传递给program2。我经历过bash教程,我能找到的唯一解决方案是:

program1 | program2

这应该可行,但我得到了一个分段错误。所以我尝试了这个并且它有效。

program1 | program2 abc

你可以猜到这导致输出文件包含字符串“abc”。 program1 | program2看起来很简单,但我想我在这里错过了什么?

3 个答案:

答案 0 :(得分:4)

|使程序向右读取(作为STDIN)左侧程序的STDOUT。

但是你的program2根本没有阅读STDIN。它读取参数(不是STDIN)。

你应该这样做:

program2 `program1`

Bash评估program1(当它看到反引号时),并将它作为arg传递给program2。

在我的键盘上,反引号(`)位于“1”键的左侧,位于我的左侧选项键上方。

编辑: 如果program1的字符串输出包含空格,并且您希望将整个字符串解释为一个参数,请使用“”或“”引用该字符串:

program2 "`program1`"

答案 1 :(得分:2)

我认为这也应该有效:

$ program1 | xargs program2

答案 2 :(得分:1)

你说,“program2以字符串作为参数。”

管道|系统重新定义了程序的标准输入,而不是参数。

要将program1的输出作为program2的参数,请使用:

  program2 $(program1)

$()(也可以使用back-tick`,但有理由避免这种情况)获取程序的输出并将其添加到当前行,然后重新计算它;因此,如果program1打印出“foo”,则要运行的命令为program2 foo