Jon*_*rdo 3 linux pipe cat argv command-line-arguments
我有一个C程序从argv读取命令行参数.是否可以将管道重定向到文件的内容作为命令行参数到我的程序?假设我有一个arguments.dat
包含此内容的文件:
0 0.2 302 0
Run Code Online (Sandbox Code Playgroud)
我希望通过以下方式调用我的程序:
./myprogram 0 0.2 302 0
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
cat arguments.dat | ./myprogram
Run Code Online (Sandbox Code Playgroud)
没有成功.
Ker*_* SB 11
xargs
是你的答案:
cat arguments.dat | xargs ./myprogram
Run Code Online (Sandbox Code Playgroud)
或者更容易:
xargs -a arguments.dat ./myprogram
Run Code Online (Sandbox Code Playgroud)
查看手册以了解许多自定义方法xargs
.例如,您可以逐行而不是按单词阅读,并且可以在更复杂的替换中使用参数.
对于大多数shell,您可以将文件的内容插入到命令行中$(<filename)
:
./myprogram $(<arguments.dat)
Run Code Online (Sandbox Code Playgroud)
如果你的shell不支持,那么旧的方法之一将起作用:
./myprogram $(cat arguments.dat)
./myprogram `cat arguments.dat` # need this one with csh/tcsh
Run Code Online (Sandbox Code Playgroud)
(您确实知道命令行参数和文件输入之间的区别,对吗?为什么您希望将命令行参数传递到程序中?)