我编写了两个简单的C程序,program1打印出一个预定义的字符串,program2将一个字符串作为参数,并将该字符串写入文件。
我要做的是获取program1的输出并将其传递给program2。我经历过bash教程,我能找到的唯一解决方案是:
program1 | program2
这应该可行,但我得到了一个分段错误。所以我尝试了这个并且它有效。
program1 | program2 abc
你可以猜到这导致输出文件包含字符串“abc”。 program1 | program2看起来很简单,但我想我在这里错过了什么?
答案 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