簡體   English   中英

來自bash pipe和heredoc的php stdin

[英]php stdin from bash pipe and heredoc

我可以從管道和heredoc接收輸入,並在命令行中從php中使用它們。

我想做這樣的事情:

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

哪個應該返回ls -l的結果

另外,我可以使用php -R和php腳本的heredoc輸入嗎?

管道

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

注意 :當你使用Here Documents for php命令時,新添加的php代碼會覆蓋之前的stdin

關於問題的-R部分:

-R / - --process-code

為每個輸入行執行的PHP代碼。 在PHP 5中添加。

此模式中有兩個特殊變量: $argn$argi $argn $argn將包含PHP當時處理的行,而$argi將包含行號。 文件

如果我理解你的問題,你正在尋找$argn變量。 Heredoc應該是你的bash的支持。

編輯:錯誤,只需使用多行調用值:

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

(我認為使用交換機的單引號更容易)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM