gpt4 book ai didi

php - 使用带有 readline 的 PHP 读取用户命令行输入,但 bash 不是默认 shell

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:51 25 4
gpt4 key购买 nike

我编写了一个 PHP 脚本,并尝试从命令行读取用户输入。我开始于

$myVar = exec('read myVar; echo $myVar;');

效果很好,但在输入时,箭头键无法正常工作。我了解到这可以通过 -e 开关解决,所以它变成了:

$myVar = exec('read -e myVar; echo $myVar;'); 

现在这在我的开发环境中非常有效,但不幸的是,在我们的生产环境中,PHP 似乎不使用 bash shell 并且不支持 -e 开关,并且可能不容易更改它。

根据 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"

关于php - 使用带有 readline 的 PHP 读取用户命令行输入,但 bash 不是默认 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32888661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com