来自bash pipe和heredoc的php stdin

时间:2011-12-27 20:46:55

标签: bash php

我可以从管道和heredoc接收输入,并在命令行的php中使用它们。

我想做这样的事情:

bash$ ls -l | php <<'code'
<?php
   echo $piped;
?>
code

哪个应返回ls -l

的结果

另外,我可以将php -R用于php脚本的heredoc输入吗?

2 个答案:

答案 0 :(得分:12)

<强>管道

ls -l | php -r 'print_r(file("php://stdin"));'


<强>定界符

$ php <<CODE
<?php
echo "Hello World\n";
?>
CODE
Hello World

联合

$ ls -l | php <<'CODE'
<?php
$f = file("php://stdin");
foreach($f as $k=>$v){
echo "[$k]=>$v";
}
?>
Program Finished
CODE

[0]=><?php
[1]=>$f = file("php://stdin");
[2]=>foreach($f as $k=>$v){
[3]=>echo "[$k]=>$v";
[4]=>}
[5]=>?>
[6]=>Program Finished
Program Finished

注意:对php命令使用 Here Documents 时,新添加的php代码会覆盖之前的stdin

答案 1 :(得分:2)

关于问题的-R部分:

  

-R / --process-code

     

为每个输入行执行的PHP代码。在PHP 5中添加。

     

此模式中有两个特殊变量:$argn$argi$argn将包含PHP当时正在处理的行,而$argi将包含行号。 Docs

如果我理解你的问题,你正在寻找$argn变量。 Heredoc应该是你的bash支持。

编辑:错误,只需使用多行调用值

$ ls -l | php -R '
printf("#%02d: %s\n", $argi, $argn);
'

(我认为使用交换机的单引号更容易)