使用带有readline的PHP读取用户命令行输入,但bash不是默认的shell
我编写了一个PHP脚本,并试图从命令行读取用户输入。我从使用带有readline的PHP读取用户命令行输入,但bash不是默认的shell,php,bash,shell,command-line-interface,readline,Php,Bash,Shell,Command Line Interface,Readline,我编写了一个PHP脚本,并试图从命令行读取用户输入。我从 $myVar = exec('read myVar; echo $myVar;'); 这很好,但当输入时,箭头键没有按应有的方式工作。我知道这可以通过-e开关解决,所以它变成: $myVar = exec('read -e myVar; echo $myVar;'); $myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"'); 现在,这在我的开发环境中很有吸引力,但不幸的
$myVar = exec('read myVar; echo $myVar;');
这很好,但当输入时,箭头键没有按应有的方式工作。我知道这可以通过-e开关解决,所以它变成:
$myVar = exec('read -e myVar; echo $myVar;');
$myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"');
现在,这在我的开发环境中很有吸引力,但不幸的是,在我们的生产环境中,PHP似乎不使用bash shell,也不支持-e开关,而且要改变这一点可能并不容易
据了解,可以强制PHP使用bash,因此它变成:
$myVar = exec('read -e myVar; echo $myVar;');
$myVar = exec('/bin/bash -c "read -e myVar; echo $myVar"');
现在,不幸的是,这不起作用,因为没有设置变量myVar
当我直接从命令行运行命令时,$myVar
(shell变量)被设置为我输入的任何内容,并因此返回
但是,在PHP-exec()中或直接在命令行上使用-c选项时,如下所示:
/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”
您考虑过使用吗?是的,我考虑过。在我发现我的开发环境不支持它之后,我停止了尝试,但是它在生产环境中确实工作得很好,所以我认为我只需要在开发环境中工作,或者甚至可以暂时使用“function_exists()”开关。所以谢谢,有点忘了。尽管如此,我还是想知道上面的内容是如何不起作用的。你是在开发一个不同于你在生产中使用的PHP版本吗?仅此而已!谢谢:-)没问题@btum81:-)