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