由于某种原因, Zshread
会回显^M
's 而不是将其作为<Enter>
按键接受。(如果-d
设置了 ,则它们会被识别为<Enter>
's ,但仍会回显。)它也不支持退格键等基本功能。
我可以通过黑客攻击/运行来解决这个问题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
但我想知道是否有更清洁的方法。
答案1
要在 zsh 下舒适地输入一行文本,请使用vared
. 使用vared
而不是read
调用呂,这相当于传入-e
bash 来调用 readline。
vared -p 'What would you like to do?: ' -c tmp
您用 plain 描述的行为read
看起来像是终端配置错误,而不是 shell 问题。运行stty -a
以显示您的终端设置,并确保设置eol
为^M
并且erase
设置为您的Backspace键发送的内容。根据操作系统及其设置方式以及终端,Backspace发送^H
或^?
。退格设置通常会因为某些配置文件试图手动设置而出错,因此您应该做的第一件事就是跟踪并删除任何此类错误配置。如果找不到,请检查终端仿真器的设置以检查它是否未设置为某些历史兼容模式。如果其他所有方法都失败,请在您的中添加类似这样的内容~/.zshrc
:
if [[ $(ps -o comm= $PPID) = iterm ]]; then
stty erase '^?'
fi