【问题标题】:Extract arguments from stdout and pipe从标准输出和管道中提取参数
【发布时间】:2011-09-26 08:21:12
【问题描述】:

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

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

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

但脚本只执行一次。如何解决这个问题?我做的不对吗?

【问题讨论】:

    标签: linux perl unix stdout xargs


    【解决方案1】:
     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 标志。

    【讨论】:

      【解决方案2】:

      我希望这会有所帮助:

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

      【讨论】:

        【解决方案3】:

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

        相反,您可以让 shell 为您扩展通配符: 对于我在 /usr/local/*.log 中;做脚本.pl $i;完成

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-23
          • 1970-01-01
          • 1970-01-01
          • 2021-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多