嗨,我有一个C程序,该程序占两个数字并添加它们。非常简单,只是在这里学习C。但是,我有一个CSV文件,其中包含两个列,这些列是用bash脚本解析的,并且将其输送到C程序中不会产生结果。例如,如果i 手动键入:
$ ./adder 1 2
$ 3
然后我的bash程序解析如下
$ ./parser test.csv
$ 1 2
目前CSV文件中只有一行。即与以前的C文件完全相同的输入
然后做:
$ ./parser | ./ adder
$
我没有结果。
这里发生了什么?
使用$ ./adder 1 2
,您将1 2
作为命令行参数传递给程序,该程序可在argv[]
中使用。
但是使用$ ./parser | ./ adder
,parser
的输出作为输入作为adder
即adder
尝试从标准输入-stdin
(使用scanf
,gets
等)读取,它将作为输入。
如果您的程序没有从标准输入中读取,则不会得到这些。
如果您想使它起作用,则在Linux上使用xargs
$ ./parser | xargs ./adder
看起来ADDER接受命令行中的数字,在管道中,您尝试在标准输入中为数字提供数字。您应该能够通过Xargs实现自己想要的东西:
./parser | xargs ./adder
您应该尝试使用 xargs
将一个程序的输出读取到下一个程序的命令行中。
管道重定向 stdout to stdin 。STDIN与在命令行中输入您的论点不同。Xargs允许您将stdin(由管道创建)转换为命令行参数。尝试以下操作:
./parser | xargs ./adder
您可以在心理上读这一点:"解析器的输出用作加法器的参数。"