使用 readline PHP 读取用户命令行输入,但 bash 不是默认值 shell
Reading user command line input with PHP with readline, but bash is not default shell
我写了一个 PHP 脚本,我正在尝试从命令行读取用户输入。我从
开始
$myVar = exec('read myVar; echo $myVar;');
效果很好,但在键入输入时,箭头键无法正常工作。我了解到这可以通过 -e 开关解决,所以它变成了:
$myVar = exec('read -e myVar; echo $myVar;');
现在这在我的开发环境中很有用,但不幸的是,在我们的生产环境中似乎 PHP 不使用 bash shell 并且不支持-e switch,要改这个恐怕不容易。
根据the third answer to this question可以强制PHP使用bash,所以变成了:
$myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"');
现在,不幸的是这不起作用,因为未设置变量 myVar
。
当我 运行 直接从命令行 $myVar
(shell 变量)设置命令时,无论我的输入是什么,都会回显
然而,当使用 -c 选项时,在 PHP-exec() 中或直接在命令行中,如下所示:
/bin/bash -c "read -e myVar; echo $myVar";
$myVar
根本没有设置,一个空字符串(或任何 $myVar
的先前值)被回显
我做错了什么?
问题是 $myVar
在传递给 bash 之前正在被解释。以下将通过在传递给 shell 之前转义 $
来工作:
/bin/bash -c "read -e myVar; echo $myVar"
你也可以使用 $REPLY
缩短一点
/bin/bash -c "read -e; echo $REPLY"
您使用的命令是正确的。
解决方法是使用正确的转义序列:
$myVar = exec ('/bin/bash -c \'read -e myVar; echo $myVar \'');
我写了一个 PHP 脚本,我正在尝试从命令行读取用户输入。我从
开始$myVar = exec('read myVar; echo $myVar;');
效果很好,但在键入输入时,箭头键无法正常工作。我了解到这可以通过 -e 开关解决,所以它变成了:
$myVar = exec('read -e myVar; echo $myVar;');
现在这在我的开发环境中很有用,但不幸的是,在我们的生产环境中似乎 PHP 不使用 bash shell 并且不支持-e switch,要改这个恐怕不容易。
根据the third answer to this question可以强制PHP使用bash,所以变成了:
$myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"');
现在,不幸的是这不起作用,因为未设置变量 myVar
。
当我 运行 直接从命令行 $myVar
(shell 变量)设置命令时,无论我的输入是什么,都会回显
然而,当使用 -c 选项时,在 PHP-exec() 中或直接在命令行中,如下所示:
/bin/bash -c "read -e myVar; echo $myVar";
$myVar
根本没有设置,一个空字符串(或任何 $myVar
的先前值)被回显
我做错了什么?
问题是 $myVar
在传递给 bash 之前正在被解释。以下将通过在传递给 shell 之前转义 $
来工作:
/bin/bash -c "read -e myVar; echo $myVar"
你也可以使用 $REPLY
/bin/bash -c "read -e; echo $REPLY"
您使用的命令是正确的。 解决方法是使用正确的转义序列:
$myVar = exec ('/bin/bash -c \'read -e myVar; echo $myVar \'');