¿Mejor manera de leer una línea de entrada del usuario en zsh? (por ejemplo, con zle?)

11

Zsh readpor alguna razón está haciendo eco ^Men lugar de aceptarlos como <Enter>pulsaciones de teclas. (Si -destá configurado, entonces se reconocen como <Enter>'s, pero aún se repiten). Tampoco admite elementos básicos como la tecla de retroceso.

Puedo evitar esto pirateando / corriendo 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

pero me pregunto si hay una forma más limpia.

Nicholas Tung
fuente
No se puede confirmar en una nueva zshinstalación 4.3.10; % read aFunciona bien aquí.
user1686
Esto está usando iterm en OS X; readfunciona en máquinas Linux.
Nicholas Tung

Respuestas:

19

Para ingresar una línea de texto cómodamente bajo zsh, use vared. Usando en varedlugar de readinvoca zle , que es el equivalente de pasar -ebash para invocar readline.

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

El comportamiento que describe con normalidad readparece un terminal mal configurado en lugar de un problema de shell. Ejecute stty -apara mostrar la configuración de su terminal, y asegúrese de que eolesté configurado ^My eraseconfigurado para lo que Backspaceenvía su clave. Dependiendo del sistema operativo y de cómo está configurado y en el terminal, Backspaceenvía uno ^Ho ^?. La configuración de retroceso suele fallar debido a algún archivo de configuración que intenta configurarlo manualmente, por lo que lo primero que debe hacer es rastrear y eliminar dicha configuración incorrecta. Si no encuentra ninguno, revise la configuración de su emulador de terminal para verificar que no esté configurado en algún modo de compatibilidad histórica. Si todo lo demás falla, agregue algo como esto a su ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi
Gilles 'SO- deja de ser malvado'
fuente
1
vared -p '¿Qué te gustaría hacer ?:' -c tmp
zzapper
¡Muy guay! No sabía sobre la varedconstrucción. Resulta que zshzledefinitivamente vale la pena hojear la página de manual.
ratijas