2015-02-26 4 views
8

Sto iniziando con un progetto Laravel 5 e sto provando a eseguire alcuni esperimenti usando 'php artisan tinker' (psy shell), ma mi sto imbattendo in qualche stranezza. Nella shell tinker/psy, premendo uno qualsiasi dei tasti freccia si stampa letteralmente caratteri sullo schermo anziché eseguire il comportamento desiderato (sposta il carattere per sinistra e destra, per scorrere i comandi recenti per su e giù).Tasti freccia che non funzionano nella shell

Su è in uscita ^[[A. Giù sta emettendo ^[[B. L'uscita a destra è ^[[C. La parte sinistra sta emettendo ^[[D.

Questo è probabilmente un problema con il mio terminale e non con un bug di Laravel. Sto ottenendo lo stesso comportamento bacato durante l'esecuzione di php -a.

Sono in esecuzione terminale su OSX, con un'emulazione xterm.

risposta

21

Il REPL di PHP non implementa le funzionalità di modifica e cronologia della riga di readline. Non so se c'è un modulo PHP che lo implementa, ma si può fare:

rlwrap php artisan tinker 

Potrebbe essere necessario installare rlwrap per il sistema operativo.

+1

Grazie! questo sembra essere il mio problema. Sembra che ci sia una libreria php readline: http://php.net/manual/en/book.readline.php, sebbene rlwrap sia troppo semplice. –

+0

Funziona! Ho installato rlwrap e avviato Tinker con 'rlwrap php artisan tinker'. Ora posso usare le mie frecce direzionali. – charlesrockbass

+1

Grazie per il suggerimento! Per chi si chiede come installare rlwrap su OSX facilmente, basta installare Homebrew incollando l'unico supporto nella loro homepage (http://brew.sh) e quindi digitare nella console: 'brew install rlwrap' – OMA

2

Ciò è dovuto al fatto che PHP non viene creato con supporto readline. Puoi abilitarlo quando compili e costruisci PHP con l'argomento --with-readline.

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

+0

Questo non fornisce una risposta a la domanda. Una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/12397988) –

+0

Ciao Mike. Questa soluzione è esattamente come ho risolto il problema di freccia e backspace in Linux e OSX. Il collegamento era alla documentazione che supportava la mia risposta. Il problema non è psysh, è mancanza di supporto readline in PHP. Se pensi che questo abbia bisogno di chiarimenti, cosa non ti è chiaro? – John

1

suppongo che il tuo account è stato creato con /bin/sh invece di /bin/bash

È necessario cambiare la shell di login in questo caso. Segui questi passaggi e il problema verrà risolto.

  1. sudo chsh -s /bin/bash <username>
  2. disconnettersi e accedere di nuovo in.
0

Nel mio caso, ho bisogno di installare 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]