我有一个旧的 RedHat 盒子,需要对其进行一些工作:
$ lsb_release -a
LSB Version: 1.3
Distributor ID: RedHatEnterpriseWS
Description: Red Hat Enterprise Linux WS release 4 (Nahant Update 7)
Release: 4
Codename: NahantUpdate7
我在使用 shell 提示符时遇到了严重的问题。(bash)特别是,如果我在命令行中输入以下内容:
$ abcdefghijklmnopqrstuvwxyz
...然后,如果我用箭头返回到该m
角色,然后按下Delete
,我会得到这样的结果:
$ abcdefghijkLMNopqrstuvwxyz
(但情况会变得更糟。如果我再四处乱窜更多的,它每次只能翻转一个字母。)
我将我的stty
设置与运行正常的 Ubuntu 机器进行了比较,没有发现明显差异。它们如下:
$ stty -a
speed 38400 baud; rows 58; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
这让我抓狂。我还应该查找什么?这可能是什么原因造成的?
答案1
现在完全说得通了……
我公司使用的产品中有一条杂散线.profile
,因为很多人仍在使用ksh
:
set -o vi
好吧,猜猜vi
如果你输入会发生什么~
?没错,它会交换大小写!猜猜如果你输入会发生什么3~
?它会交换 3 个字符的大小写!(虽然我现在还不能确定如何解释这种不一致的行为,有时它会交换一个,有时它会交换 3 个……)
无论如何,set -o vi
从我的 .profile 中删除即可解决问题。
答案2
.inputrc
您的主目录中是否有文件?如果没有,请尝试创建一个包含以下内容的文件:
"\e[3~": delete-char
如果有这样的文件,也许它做了一些不该做的事情?