Besserer Weg, um eine Zeile mit Benutzereingaben in zsh zu lesen? (zB mit zle?)

11

Zsh's ist readaus irgendeinem Grund ein Echo ^M, anstatt sie als <Enter>Tastenanschläge zu akzeptieren . (Wenn -dfestgelegt, werden sie als <Enter>'s erkannt , aber immer noch wiedergegeben.) Es werden auch keine Grundlagen wie die Rücktaste unterstützt.

Ich kann das umgehen, indem ich hacke / renne bash,

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

aber ich frage mich, ob es einen saubereren Weg gibt.

Nicholas Tung
quelle
Kann bei einer zshNeuinstallation von 4.3.10 nicht bestätigen ; % read afunktioniert hier gut.
user1686
Dies verwendet iterm unter OS X; readfunktioniert auf Linux-Rechnern.
Nicholas Tung

Antworten:

19

Verwenden Sie, um eine Textzeile bequem unter zsh einzugeben vared. Verwenden von varedanstelle von readruft zle auf , was dem Übergeben -evon bash zum Aufrufen von readline entspricht.

vared -p 'What would you like to do?: ' -c tmp

Das Verhalten, das Sie mit plain beschreiben, readsieht eher wie ein falsch konfiguriertes Terminal als wie ein Shell-Problem aus. Führen Sie stty -aIhre Terminaleinstellungen zu zeigen, und stellen Sie sicher , dass eolauf eingestellt ist ^Mund eraseeingestellt ist, was Ihr BackspaceSchlüssel sendet. BackspaceSendet je nach Betriebssystem und Einrichtung und auf dem Terminal entweder ^Hoder ^?. Die Rücktasteinstellung geht normalerweise aufgrund einer Konfigurationsdatei schief, die versucht, sie manuell festzulegen. Sie sollten daher zunächst eine solche Fehlkonfiguration verfolgen und entfernen. Wenn Sie keine finden, überprüfen Sie die Einstellungen Ihres Terminalemulators, um sicherzustellen, dass er nicht in einen historischen Kompatibilitätsmodus versetzt wurde. Wenn alles andere fehlschlägt, fügen Sie Folgendes hinzu ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi
Gilles 'SO - hör auf böse zu sein'
quelle
1
vared -p 'Was möchten Sie tun?:' -c tmp
zzapper
So cool! varedIch wusste nichts über das eingebaute. Es stellt sich heraus, dass zshzlees sich definitiv lohnt , die Manpage zumindest durchzublättern.
Ratijas