shell 使用-B选项可阻止解释器

pbwdgjma  于 2023-03-13  发布在  Shell
关注(0)|答案(1)|浏览(111)

当尝试使用-B选项从Linux shell执行PHP解释器时,会执行提供的开始_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

并且shell阻塞了。我必须使用ctrl+C返回到提示符。我期望脚本f2.php也被执行。我做错了什么?

qojgxg4l

qojgxg4l1#

当使用-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将运行init代码和脚本,然后终止:

me:~$ echo | php -B 'echo "init\n";' -F f2.php
init
f2 running.
me:~$

相关问题