使用 -B 选项块解释器

问题描述 投票:0回答:2

当尝试从 Linux shell 执行 PHP 解释器时,使用 -B 选项,执行提供的 begin_code 但进程阻塞并且主脚本 (

f2.php
) 未执行。

问题复现:

$ php -v
PHP 8.1.13 (cli) (built: Nov 22 2022 14:42:07) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.13, Copyright (c), by Zend Technologies
$ cat f2.php 
<?php
 echo "f2 running.\n";
?>
$ php f2.php 
f2 running.
$ php  -B 'echo "init\n";' f2.php 
init

壳块。然后我必须使用 ctrl+C 返回到提示符。 我希望脚本

f2.php
也被执行。 我做错了什么?

php linux shell command-line
2个回答
0
投票

我从来没有尝试过这个,但是我解释精美手册的方式

-B
只有当代码来自
STDIN
而不是来自文件时才有效?

也可以使用参数逐行处理标准输入 -R 或 -F。在这种模式下,每个单独的输入行都会产生由 -R 或 要执行的 -F 指定的文件。您可以通过 $argn 访问输入行。尽管 处理输入行 $argi 包含正在处理的实际行数。 此外,参数 -B 和 -E 可用于在和之前执行代码(请参阅 -r) 在分别处理完所有输入行之后。 注意输入是从 STDIN 因此从 STDIN 读取显式更改下一个输入行或跳过 输入线。

上面的重点是我的。

也许试试:

cat f2.php | php -B'echo "init\n";

0
投票

当使用

-B
参数时,PHP进入交互模式。要执行
f2.php
,您需要添加
-F
参数,但它只会在您按下 ENTER 键后运行您的脚本:

me:~$ php -B 'echo "init\n";' -F f2.php
init
<ENTER>
f2 running.
<ENTER>
f2 running.
^C
me:~$

要“欺骗”PHP 进入非交互模式,请将某些内容输入

php
命令。然后 PHP 将运行初始化代码和您的脚本,然后终止:

me:~$ echo | php -B 'echo "init\n";' -F f2.php
init
f2 running.
me:~$
© www.soinside.com 2019 - 2024. All rights reserved.