2015-03-03 23 views
0

我陷入了终端的奇怪行为。 iTerm和我的OS X上的基本终端都不起作用。我只能输入'A'而不是'a',但不能输入'a'。如果我尝试bash --noediting,那么我可以键入'a',但使用起来非常不舒服。我检查了我的~/.bashrc,~/.bash_profile并没有发现任何对我来说很奇怪的东西。任何人都可以帮我吗? 任何反馈意见。无法在终端中输入“a”符号

回答

2

很可能你已经以某种方式引入了对a的readline绑定。

作为第一步,尝试这个办法:(grep的说法是$"a",但你不能键入:))

bind -p | grep $'"\x61"' 

应该打印:

"a": self-insert 

如果那么,那么我的猜测是错误的,你需要去其他地方看看。如果没有,那么你需要修复它,你可以这样做:

bind $'"\x61"':self-insert 

现在你需要找到你的bash启动文件不正确的bind命令。我会从bind开始。它可能在来自其中一个文件的文件中。祝你好运。

您还应该检查文件~/.inputrc,readline库使用它来初始化它的绑定。

+0

好吧,在'绑定$'之后“\ x61”':self-insert'我可以输入'a'。但是我在bash-startup文件中找不到“bind”。我也grepped源文件,但没有'bind'命令。在'〜/ .bash_profile'中有一个shell脚本,它没有'bind'命令,但是即使我在'〜\ .bash_profile'中注释了这行,它也不会导致任何结果。我还应该尝试检查什么? – 2015-03-03 09:15:24

+0

您是否检查.inputrc?你有这个文件吗? – rici 2015-03-03 15:03:32

+0

是的,我做到了。该文件中没有什么奇怪的。 – 2015-03-04 08:15:38

1

如果字母a已映射到其中一个控制字符,则可以获得一些有趣的效果。尝试stty -a,但你可能需要键入:

  • stty-控制-Va

得到-a到命令。这应该告诉你是这样的:

speed 9600 baud; 65 rows; 135 columns; 
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl 
    -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo 
    -extproc 
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8 
    -ignbrk brkint -inpck -ignpar -parmrk 
oflags: opost onlcr -oxtabs -onocr -onlret 
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow 
    -dtrflow -mdmbuf 
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>; 
    eol2 = <undef>; erase = ^?; intr = ^C; kill = ^X; lnext = ^V; 
    min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; 
    stop = ^S; susp = ^Z; time = 0; werase = ^W; 

,只是如果我的怀疑是正确的,cchars值之一是a

+0

不适用于我。 'cchars:discard =^O; dsusp =^Y; eof =^D; eol = ; \t eol2 = ;擦除= ^?; intr =^C; kill =^U; lnext =^V; \t min = 1; quit =^\;再版=^R; start =^Q;状态=^T; \t stop =^S; susp =^Z;时间= 0; werase =^W;' – 2015-03-03 09:25:12