我有两个用Prog1.c
编写的程序(Prog2.c
和C
),每个程序都有一个命令行参数。
Prog1.c
将文件名作为参数,从文件中读取内容并将其输出到STDOUT
(标准输出)屏幕。 Prog2.c
将数据作为参数并执行某些操作。我想将Prog1.c
的输出重定向到Prog2.c
作为输入。
我试过跟随bash脚本,它给了我错误
#!/bin/bash
prog2 "`prog1 file.txt`"
我也尝试过没有引号,在这两种情况下,它都会给我以下错误。
Prog2:: argument list too long.
答案 0 :(得分:3)
要将命令的输出作为另一个命令的参数,您可以使用反引号:
prog2 "`prog1 file.txt`"
或使用$()
(我相信这是bash的首选方式):
prog2 "$(prog1 file.txt)"
如果要将prog1的STDOUT用作prog2的STDIN,请使用| (管道)运营商:
prog1 | prog2
注意:如果要使用管道,则需要修改prog2的代码,因为它需要从STDIN而不是argv
函数的main()
读取命令参数。有关如何执行此操作的示例,请参阅How to read a line from the console in C?。
答案 1 :(得分:2)
PIPES !!!!!
在命令行上(或在脚本中)执行prog1 file.txt | prog2
答案 2 :(得分:1)
你必须在prog1
之前和之后的两个地方使用反引号prog2 "`prog1 file.txt`"
当你得到"参数列表太长"时,你已达到命令行的系统限制。然后,您必须找到另一种方法将数据发送到prog2
。您可以从stdin
读取,并将prog1的输出传递给prog2
prog1 file.txt | prog2
当您将数据从prog1传送到prog2时,您必须更改prog2并从stdin读取而不是使用argv。
逐行阅读示例:
char buf[1024];
while (fgets(buf, 1024, stdin)) {
/* process line in buf */
}
读取空格分隔词的示例
char buf[1024];
while (scanf("%s", buf) != EOF) {
/* process word in buf */
}