Unix:Xargs不会终止

时间:2014-02-25 03:34:11

标签: shell unix xargs

我已经阅读了xargs的手册页十几次,我仍然无法弄清楚如何让它终止。当我在shell上调用它时:xargs echo this is xargs 我按ctrl + d时只看到输出。有没有办法指定我希望xargs在读取一定数量的参数后停止?因此,当我输入xargs echo this is xargs并按回车键时,我立即看到this is xargs而不必按ctrl + d?

我尝试使用-e和-E设置eof标志,这样做时对我来说都没有用:

xargs -Ez echo this is xargs z

我在问,因为我正在尝试编写一个C语言程序,该程序使用execl来调用xargs,但我的程序挂起,所以在我尝试继续编写程序之前,我想至少能够从命令行调用xargs。

2 个答案:

答案 0 :(得分:1)

Xargs 从标准输入文件获取输入后执行实用程序/命令。

当您尝试执行xargs echo something something时,等待标准输入文件的输入,一旦按下 Ctr + d 表示EOF,Xargs使用标准输入文件中的参数执行命令。

以下是示例。

bash-$ echo "Testing xargs command" | xargs echo 
# echo executes by reading the input  
#file from pipe ( which redirects first commands output into second commands input )
Testing xargs command #output
bash-$ 
bash-$ 
bash-$ xargs echo #waits until CTRL+D is pressed
Testing xargs command
Testing xargs command  #output
bash-$ 
bash-$ 
bash-$ xargs -E EOF echo # xargs option -E specifies End-OF-File-String, here EOF
Testing xargs command
EOF
Testing xargs command #output  

希望这有帮助

答案 1 :(得分:0)

xargs从stdin读取输入,然后将其附加到您传递给它的参数。你所看到的是当你运行xargs时它正在等待stdin的输入(显然是挂起),当你输入ctl + d时 - 这是EOF到标准输入,因此xargs处理它读过的所有内容。 / p>

所有名为* .conf的文件中字符串“string”的xargsgrep的示例

find . -name \*.conf -print | xargs grep string