【问题标题】:Arrow keys not working in shell箭头键在 shell 中不起作用
【发布时间】:2015-04-28 07:34:06
【问题描述】:

我开始使用 Laravel 5 项目并尝试使用“php artisan tinker”(psy shell)进行一些实验,但我遇到了一些奇怪的问题。在 tinker/psy shell 中,按任意箭头键会将字符文字打印到屏幕上,而不是执行预期的行为(左右移动字符,上下循环最近的命令)。

Up 正在输出^[[A。 Down 正在输出^[[B。 右边是输出^[[C。 左边正在输出^[[D

这可能是我的终端问题,而不是 Laravel 错误。运行 php -a 时,我遇到了同样的错误行为。

我在 OSX 上运行终端,带有 xterm 仿真。

【问题讨论】:

    标签: shell terminal laravel-5


    【解决方案1】:

    PHP REPL 没有实现 readline 的行编辑和历史记录功能。不知道有没有实现它的PHP模块,但你可以这样做:

    rlwrap php artisan tinker
    

    您可能需要为您的操作系统安装 rlwrap。

    【讨论】:

    • 谢谢!这似乎是我的问题。似乎确实有一个 readline php 库:php.net/manual/en/book.readline.php,尽管 rlwrap 太简单了。
    • 有效!我已经安装了 rlwrap 并使用 rlwrap php artisan tinker 启动了 Tinker。我现在可以使用方向箭头了。
    • 感谢您的提示!对于那些想知道如何在 OSX 上轻松安装 rlwrap 的人,只需将 Homebrew 粘贴到他们的主页 (brew.sh) 中,然后在控制台中输入:brew install rlwrap
    【解决方案2】:

    这是由于 PHP 没有使用 readline 支持构建。您可以在使用 --with-readline 参数编译和构建 PHP 时启用此功能。

    http://php.net/manual/en/features.commandline.interactive.php

    【讨论】:

    • 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
    • 嗨,迈克。这个解决方案正是我在 Linux 和 OSX 中修复箭头和退格问题的方法。该链接是支持我的答案的文档。问题不在于 psysh,它在 PHP 中缺乏 readline 支持。如果您认为这需要澄清,那么您有什么不清楚的地方?
    • 谢谢,这正是我要找的。​​span>
    【解决方案3】:

    就我而言,我需要安装php7-readline

    sudo zypper in php7-readline                                                       
    [sudo] password for root: 
    Loading repository data...
    Reading installed packages...
    Resolving package dependencies...
    
    The following NEW package is going to be installed:
      php7-readline
    
    1 new package to install.
    Overall download size: 64.0 KiB. Already cached: 0 B. After the operation, additional 30.9 KiB will be used.
    Continue? [y/n/...? shows all options] (y): 
    Retrieving package php7-readline-7.2.1-1.1.x86_64                                                                 (1/1),  64.0 KiB ( 30.9 KiB unpacked)
    Retrieving: php7-readline-7.2.1-1.1.x86_64.rpm ......................................................................................[done (8.4 KiB/s)]
    Checking for file conflicts: ....................................................................................................................[done]
    (1/1) Installing: php7-readline-7.2.1-1.1.x86_64 ................................................................................................[done]
    

    【讨论】:

      【解决方案4】:

      我的操作系统:centos 我解决了这个问题:

      sudo yum install rlwrap
      alias tinker='rlwrap php artisan tinker'
      
      

      【讨论】: