我的 bash shell 将不再使用 cd 更改目录。我早些时候在工作时注意到了这一点,发现我打开的任何新 shell(终端或 xterm 等)都会卡在主目录中并且无法退出(已经打开的终端继续正常工作)。
[~]$ pwd
/home/sys/dave
[~]$ cd /
[~]$ cd Documents/
[~]$ pwd
/home/sys/dave
[~]$ type cd
cd is a shell builtin
[~]$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
我认为这一定是一些奇怪的事情,我没有时间处理,例如内存不足的处理程序(已检查 cd 没有别名并使用内置版本)。
所以我(是的,我知道)重新启动了机器。
全新启动,完全相同的问题。
另一方面,CSH 工作正常,因此在上面的代码片段之后立即:
[~]$ csh
[~]$ cd /
[/]$ pwd
/
[/]$ cd ~/Documents/
[~/Documents]$ pwd
/home/sys/dave/Documents
[~/Documents]$
在过去的几天里,我没有安装任何新的东西或执行任何更新,直到今晚晚些时候它都工作正常。
非常感谢想法/帮助/帮助!
** 更新 **
因此,我在 .bashrc 中发现了这一行
export PROMPT_COMMAND="cd"
如果我取消设置 PROMPT_COMMAND 那么一切都会正常工作。
但是...WTF。我没有将这一行放入 .bashrc 中,直到今晚一切都运行良好。我应该将其注释掉,手动取消设置,还是像女巫一样烧毁计算机?
答案1
设置PROMPT_COMMAND
为cd
是一个非常常见的恶作剧,如果您没有设置它,并且您是唯一的用户,那么是的,您已经受到威胁。
如果朋友可以访问,这是我见过很多次的恶作剧,请与他们交谈。
答案2
如果
PROMPT_COMMAND
设置了环境变量,则在发出每个主要提示之前,该值将作为命令执行。换句话说,该变量的内容在 Bash 显示提示之前作为常规 Bash 命令执行:
[vivek@vivek-desktop man]$ PROMPT_COMMAND="echo Yahooo"
Yahooo
[vivek@vivek-desktop man]$ date
Tue Oct 20 23:50:01 IST 2009
Yahooo
cd
不带参数返回主目录(方便!)。
.bashrc
在生成每个 shell 时执行,这就是旧终端不受影响的原因。