Linux使用参数执行php文件

时间:2020-08-26 02:50:44

标签: linux xargs

我有.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

行不通,知道吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

在bash shell中,您可以从文件中读取3个变量,并像这样传递给php:

while read a b c 
do  
  ./execute php $a $b $c
done < raw.txt