2015-02-26 2 views
8

Я начинаю с проекта Laravel 5 и пытаюсь запустить некоторые эксперименты с использованием «php artisan tinker» (psy shell), но я сталкиваюсь с какой-то странностью. В оболочке tinker/psy нажатие любой из клавиш со стрелками приводит к печати символьных литералов на экране, а не к выполнению намеченного поведения (перемещение символа слева и справа, повторение последних команд для вверх и вниз).Клавиши со стрелками, не работающие в оболочке

Вверх выводит ^[[A. Вниз выводится ^[[B. Вправо выводит ^[[C. Влево выводится ^[[D.

Возможно, это проблема с моим терминалом, а не с ошибкой Laravel. При запуске php -a я получаю такое же неправильное поведение.

Я бегу терминал на OSX, с эмуляцией xterm.

ответ

21

PHP REPL не реализует возможности редактирования строки и истории в readline. Я не знаю, если есть PHP модуль, который реализует его, но вы можете сделать:

rlwrap php artisan tinker 

Вы, возможно, придется установить rlwrap для вашей операционной системы.

+1

Спасибо! это действительно моя проблема. Кажется, есть библиотека php readline: http://php.net/manual/en/book.readline.php, хотя rlwrap просто слишком прост. –

+0

Это работает! Я установил rlwrap и начал Tinker с помощью rlwrap php artisan tinker'. Теперь я могу использовать свои стрелки направления. – charlesrockbass

+1

Спасибо за подсказку! Для тех, кто задается вопросом, как легко установить rlwrap на OSX, просто установите Homebrew, вставив один вкладыш на свою домашнюю страницу (http://brew.sh), а затем введите консоль: 'brew install rlwrap' – OMA

2

Это связано с тем, что PHP не строится с поддержкой readline. Вы можете включить это при компиляции и создании PHP с аргументом --with-readline.

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

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (http://meta.stackexchange.com/questions/214173/why-do-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/12397988) –

+0

Привет, Майк. Это решение - это именно то, как я исправил проблему с стрелкой и обратным пространством в Linux и OSX. Ссылка была связана с документацией, поддерживающей мой ответ. Проблема не psysh, отсутствие поддержки readline в PHP. Если вы считаете, что это требует разъяснений, то что вам непонятно? – John

1

Я считаю, что ваша учетная запись будет создана с /bin/sh вместо /bin/bash

Вы должны изменить оболочку входа в систему в этом случае. Выполните следующие действия, и ваша проблема будет решена.

  1. sudo chsh -s /bin/bash <username>
  2. Выйдите из системы и снова войти в систему.
0

В моем случае, мне нужно установить 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] 
Смежные вопросы