从stdout和pipe中提取参数

时间:2011-06-30 21:32:12

标签: linux perl unix stdout xargs

我每次尝试使用不同的文件作为参数执行n次脚本n次:

ls /user/local/*.log | xargs script.pl

(script.pl接受文件名作为参数)

但脚本只执行一次。怎么解决这个?我没做错吗?

3 个答案:

答案 0 :(得分:2)

 ls /user/local/*.log | xargs -rn1 script.pl

我猜你的脚本只需要一个参数,你需要告诉xargs。

如果输入列表为空,则传递-r会有帮助

请注意,以下内容通常更好:

 find /user/local/ -maxdepth 1 -type f -name '*.log' -print0 |
       xargs -0rn1 script.pl

它将处理报价和目录更安全。


要查看xargs实际执行的内容,请使用-t标志。

答案 1 :(得分:0)

我希望这会有所帮助:

for i in $(ls /usr/local/*.log)
do
  script.pl $i
done

答案 2 :(得分:0)

我会避免使用ls,因为这通常是许多系统的别名。例如。如果您的ls生成彩色输出,那么这将不起作用:     我在ls;做ls $ i;完成

相反,你可以让shell为你扩展通配符:     我在/usr/local/*.log; do script.pl $ i;完成