【问题标题】:Linux execute php file with argumentsLinux执行带参数的php文件
【发布时间】:2020-08-26 21:21:01
【问题描述】:

我有 .php 需要三个参数。例如:./execute.php 11 111 111 我喜欢带有间距的文本文件中的数据列表。例如:

22 222 222
33 333 333
44 444 444

我正在考虑使用 xargs 来传递论点,但它不起作用。 这是我的尝试

cat raw.txt | xargs -I % ./execute.php %0 %1 %2

不工作,你知道吗? 感谢您的帮助

【问题讨论】:

    标签: linux xargs


    【解决方案1】:

    根据以下记录,您没有正确处理数据:

    pax> printf '2 22 222\n3 33 333\n4 44 444\n' | xargs -I % echo %0 %1 %2
    2 22 2220 2 22 2221 2 22 2222
    3 33 3330 3 33 3331 3 33 3332
    4 44 4440 4 44 4441 4 44 4442
    

    每个% 都为您提供整行,% 后面的数字只是添加到末尾。

    为了调查,我们首先创建一个伪造的处理文件proc.sh(和chmod 700,以便我们可以轻松运行它):

    #!/usr/bin/env bash
    echo "$# '$1' '$2' '$3'"
    

    即使您切换到 xargs -I % ./proc.sh %,您也会发现您得到 一个 带有嵌入空格的参数,而不是三个单独的参数:

    pax> vi proc.sh ; printf '2 22 222\n3 33 333\n4 44 444\n' | xargs -I % ./proc.sh %
    1 '2 22 222' '' ''
    1 '3 33 333' '' ''
    1 '4 44 444' '' ''
    

    最简单的解决方案可能是切换到for read 循环,类似于:

    pax:~> printf '2 22 222\n3 33 333\n4 44 444\n' | while read p1 p2 p3 ; do ./proc.sh ${p1} ${p2} ${p3} ; done
    3 '2' '22' '222'
    3 '3' '33' '333'
    3 '4' '44' '444'
    

    你可以看到程序是用三个参数调用的,你只需要适应你自己的程序:

    while read p1 p2 p3 ; do ./proc.sh ${p1} ${p2} ${p3} ; done < raw.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2018-05-02
      • 2011-10-09
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多