Terminal 箭头键在php CLI脚本中不起作用|编辑:涉及STDIN

Terminal 箭头键在php CLI脚本中不起作用|编辑:涉及STDIN,terminal,stdin,php,Terminal,Stdin,Php,我最近进入了PHP CLI的迷人世界 然后我在ubuntu终端上运行脚本,当我按下箭头键时,它没有移动光标,而是打印转义码^[[A^[[B^[[C^[[D] 如果我使用正常的终端,问题就不会出现。所以我猜在我的脚本中有某种东西阻止了正常的行为 有人有什么解决办法吗 谢谢你的帮助 编辑: 看起来是STDIN,我用它来捕捉输入,问题是!当等待STDIN输入时,终端显示错误的字符!! 如何解决此问题?我建议将fgets(STDIN)调用替换为函数,该函数至少在Linux环境中可用。请注意,尽管可以单独

我最近进入了PHP CLI的迷人世界

然后我在ubuntu终端上运行脚本,当我按下箭头键时,它没有移动光标,而是打印转义码^[[A^[[B^[[C^[[D]

如果我使用正常的终端,问题就不会出现。所以我猜在我的脚本中有某种东西阻止了正常的行为

有人有什么解决办法吗

谢谢你的帮助

编辑:

看起来是STDIN,我用它来捕捉输入,问题是!当等待STDIN输入时,终端显示错误的字符!!
如何解决此问题?

我建议将
fgets(STDIN)
调用替换为函数,该函数至少在Linux环境中可用。请注意,尽管可以单独安装readline库,但它不在OS X中提供

// $input = fgets(STDIN);
$input = readline('Input: ');
如果需要行编辑的唯一原因是从拖放文件路径中删除多余的´-字符,则始终可以修剪脚本中字符串中的任何额外字符

$input = readline('Input: ');
$input = trim($input, '´');

请给我们看一些代码好吗?如果您还没有使用它,可能会有所帮助。嗯,这不是代码的问题,当我按箭头键时,它会显示其中一个[[a^[[B^[[D^[[C],而不是移动光标!不同的实现肯定会导致不同的行为,至少对我来说是这样。例如,
fgets(STDIN)
fread(STDIN,100)
我得到与您相同的转义字符,而
readline()
利用GNU readline,左右箭头键允许行编辑(在Linux上通过Windows PuTTY SSH终端)。不确定使用
fgets
fread
是否可以进行行编辑,因此我怀疑您使用了
readline
。这是另一种可能性。但是,如果看不到任何代码,我恐怕无法(尝试)提供太多帮助。是的,我认为您是对的!问题发生在脚本等待fgets(STDIN)输入时!!!我在mac上没有注意到,因为我需要一个文件路径作为输入,我过去常常在终端中拖放所需的文件。相反,当我在Ubuntu上拖放时,终端会在文件路径周围显示恼人的´,所以我需要箭头来移动和删除这些´。这使问题变得明显。那么我们如何解决这个问题呢?我应该传递给re吗adline()?PS:我如何解决这个问题?有没有办法或者我应该改变我的代码来清除它们?无论如何,谢谢!而且它更方便用户,因为你可以使用光标键导航,有历史记录等等。所以唯一的方法是安装readline?我会寻找一种方法来安装它,而不必重新编译整个php。有什么建议吗?@Bakaburg:不确定是否有一种真正简单的方法可以让
readline
在OS X中工作。使用MacPorts的安装说明。如果没有安装MacPorts,请先安装。MacPorts反过来需要苹果的Xcode开发工具。。。