2015-02-26 18 views
8

Zaczynam od projektu Laravel 5 i próbuję przeprowadzić pewne eksperymenty za pomocą "php artisan tinker" (psy shell), ale mam dziwny przebieg. W powłoce Tinker/Ps, naciśnięcie dowolnego klawisza ze strzałkami powoduje drukowanie literałów znaków na ekranie zamiast wykonywania zamierzonego zachowania (przesuwaj znak po lewej i prawej, ostatnie polecenia cyklu w górę iw dół).Klawisze ze strzałkami nie działają w powłoce

W górę wyprowadza się ^[[A. Down wyprowadza ^[[B. W prawo jest wyprowadzanie ^[[C. Po lewej stronie wyświetlany jest komunikat ^[[D.

Jest to prawdopodobnie problem z moim terminalem, a nie błędem Laravel. Otrzymuję to samo błędne zachowanie podczas uruchamiania php -a.

Używam terminala na OSX, z emulacją xterma.

Odpowiedz

21

PHP REPL nie implementuje funkcji edycji linii i historii w readline. Nie wiem, czy jest jakiś moduł PHP, który realizuje to, ale można zrobić:

rlwrap php artisan tinker 

Być może trzeba będzie zainstalować rlwrap dla danego systemu operacyjnego.

+1

Dzięki! to wydaje się być moim problemem. Wygląda na to, że jest to biblioteka php: http: //php.net/manual/en/book.readline.php, chociaż rlwrap jest po prostu zbyt łatwa. –

+0

To działa! Zainstalowałem rlwrap i zacząłem Tinker od 'rlwrap php artisan tinker'. Teraz mogę używać moich strzałek kierunkowych. – charlesrockbass

+1

Dzięki za napiwek! Dla tych, którzy zastanawiają się, jak zainstalować rlwrap na OSX łatwo, po prostu zainstaluj Homebrew wklejając jedną linijkę na swojej stronie głównej (http://brew.sh), a następnie wpisz konsolę: 'brew install rlwrap' – OMA

2

Wynika to z faktu, że PHP nie jest budowane z obsługą readline. Możesz włączyć to podczas kompilowania i budowania PHP z argumentem --with-readline.

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

+0

To nie daje odpowiedzi na pytanie. Po uzyskaniu wystarczającego [reputation] (http://stackoverflow.com/help/whats-reputation) będziesz mógł [komentować dowolny wpis] (http://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/12397988) –

+0

Cześć Mike. To rozwiązanie dokładnie naprawiło problem ze strzałką i backspace w systemach Linux i OSX. Link był do dokumentacji wspierającej moją odpowiedź. Problem nie jest psysh, to brak obsługi readline w PHP. Jeśli uważasz, że to wymaga wyjaśnienia, to co było dla Ciebie jasne? – John

1

Przypuszczam konta jest tworzony z /bin/sh zamiast /bin/bash

Musisz zmienić powłokę logowania w tym przypadku. Wykonaj poniższe czynności, a problem zostanie rozwiązany.

  1. sudo chsh -s /bin/bash <username>
  2. wylogować i zalogować ponownie.
0

W moim przypadku muszę zainstalować 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] 
Powiązane problemy