我可以从管道和heredoc接收输入,并且可以在命令行中通过php使用它们。php stdin从bash pipe和heredoc
我想要做这样的事情:
bash$ ls -l | php <<'code'
<?php
echo $piped;
?>
code
应返回的ls -l
的结果还有,我可以用php -R
与定界符输入PHP脚本?
我可以从管道和heredoc接收输入,并且可以在命令行中通过php使用它们。php stdin从bash pipe和heredoc
我想要做这样的事情:
bash$ ls -l | php <<'code'
<?php
echo $piped;
?>
code
应返回的ls -l
的结果还有,我可以用php -R
与定界符输入PHP脚本?
管道
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
命令新增php
代码覆盖以前的stdin
所以你说的是,当你把管道和heredoc结合在一起时,管道部分被heredoc部分践踏,并且不能被检索? – 2011-12-27 21:50:33
@BillyMoon是的。它不能被回收。 – 2011-12-28 04:28:53
就问题的-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);
'
(我认为这是更容易使用单引号交换机)
我无法弄清楚如何将heredoc传递给'php -R'而不是字符串,并且我不确定这是否可以直接使用。 – 2011-12-27 21:52:07
我的不好,只是尝试多行“字符串”,而不是heredoc。编辑这个问题来反映这一点。 – hakre 2011-12-27 22:15:32
哇,多行字符串 - 什么是启示。简单而优雅 - 我不知道......我最近花了太多时间写javascript! – 2011-12-27 22:19:46
@DaveRandom在*庆典* **这里String **需要三个'<'和** Here Document **两个'''。 – 2011-12-27 21:29:42
@Shiplu我收回我的贞操并承认失败(因为我之前从未在bash中遇到过)。评论将被删除... – DaveRandom 2011-12-27 21:32:12
@DaveRandom:迂腐主义要求你停止在不恰当的地方写撇号。 – 2011-12-27 21:37:40