您好我有一个c程序,它接收两个数字并添加它们。非常简单,只是在这里学习c。但是我有一个带有两个列的csv文件,我用bash脚本解析过,并且在c程序中输入管道不会产生结果。例如,如果我手动输入:
$ ./adder 1 2
$ 3
然后我的bash程序解析如下
$ ./parser test.csv
$ 1 2
目前csv文件中只有一行。即与之前完全相同的c文件输入
然后做:
$ ./parser | ./ adder
$
我没有结果。
这里发生了什么?
答案 0 :(得分:5)
使用$ ./adder 1 2
,您将1 2
作为命令行参数传递给程序,argv[]
中提供了这些参数。
但是$ ./parser | ./ adder
parser
的输出作为输入传递给adder
,即如果adder
尝试从标准输入读取 - stdin
(使用函数)比如scanf
,gets
等),它会将其作为输入。
如果您的程序没有从标准输入读取,则不会获得这些。
如果你想让它工作,在linux上使用xargs
作为
$ ./parser | xargs ./adder
答案 1 :(得分:1)
看起来adder在命令行中接受数字,而在管道中,您尝试在标准输入中提供数字。你应该能够用xargs实现你想要的东西:
./parser | xargs ./adder
答案 2 :(得分:0)
您应该尝试使用xargs
将一个程序的输出读入下一个程序的命令行。
管道将 stdout 重定向到 stdin 。 stdin与在命令行中输入参数不同。 xargs允许您将stdin(由管道创建)转换为命令行参数。试试这个:
./parser | xargs ./adder
您可以在心理上将其理解为:“解析器的输出用作加法器的参数。”