【发布时间】:2012-05-25 00:40:24
【问题描述】:
我最近进入了 PHP CLI 的迷人世界。
然后我在 ubuntu 终端上运行脚本,当我按下箭头键时,它没有移动光标,而是打印了转义码 ^[[A^[[B^[[C^[[D.
如果我使用普通终端,问题不会出现。所以我猜想在我的脚本中有些东西会阻止正常行为。
有人有解决办法吗?
感谢您的帮助!
编辑:
看起来是标准输入,我用它来捕捉输入,问题!等待 STDIN 输入时,终端显示错误字符!! 我该如何解决这个问题?
【问题讨论】:
-
您能给我们看一些代码吗? readline 如果您还没有使用它,它可能会有所帮助。
-
嗯,不是代码问题,当我按下箭头键时,它会显示其中一个 [[A^[[B^[[D^[[C 而不是移动光标!
-
不同的实现肯定会导致不同的行为,至少对我来说是这样。例如,使用
fgets(STDIN)或fread(STDIN, 100),我得到与您相同的转义字符,而使用使用GNU readline 的readline(),左右箭头键允许行编辑(这在Linux 机器上通过Windows PuTTY SSH 终端)。不确定是否可以使用fgets或fread进行行编辑,所以我怀疑您使用readline。 Ncurses 是另一种可能性。但如果没有看到任何代码,恐怕我无法(尝试)提供太多帮助。 -
是的,我认为你是对的!脚本等待来自 fgets(STDIN) 的输入时会出现问题!!!我在 mac 上没有注意到,因为我需要一个文件路径作为输入,并且我曾经在终端中拖放所需的文件。相反,当我在 Ubuntu 上拖放时,终端会在文件路径周围显示令人讨厌的 ',所以我需要箭头来移动和删除那些 '。这使问题显而易见。那么我们如何解决这个问题呢?我应该传递给 readline() 吗? PS:我该如何解决'问题?有什么方法或者我应该改变我的代码来清除它们吗?还是谢谢!