我重启了我的 kubuntu 机器 - 如果有必要的话,从菜单重启leave->restart
。通常我的终端窗口会在重启后自动打开,但这次我的提示是错误的,还有一堆其他奇怪的事情。
现在 /bin/sh 是 /bin/dash 的链接,dash 似乎已加载,但突然间它比重启前笨了很多。现在它无法识别是什么shopt
。当我尝试点执行我的配置文件 ( . ~/.bash_profile
) 时,我收到类似 的错误/bin/sh: 28: /etc/bash_completion: [[: not found
。在命令行上,命令完成不起作用,命令历史记录的上下键也不起作用。
我并没有故意下载任何可能造成此问题的软件包。这突然发生的原因是什么?
现在我/bin/bash
从终端的命令行执行,一切似乎都很好,但这并不能解释哪里出了问题dash
。bash
据称,它比 dash 更重,而且由于我打开了 20 个左右的终端,如果这是真的,我想避免这种开销。
感谢您对此提出任何见解。
答案1
你不可能一直在使用 dash:
Dash 无法理解
[[
,因为它是 Bash 的内部命令之一。Dash 不支持制表符补全。
Dash 不支持箭头键(编辑、历史记录)。
(来源)
唯一可能的解释是您的默认 shell 以某种方式发生了变化。我显然不知道这是怎么发生的,但我只能想到两种方法:
某些内容编辑
/etc/passwd
并替换了您的默认 shell。这种情况极不可能发生。您通过符号链接访问 Bash(最有可能
/bin/sh
),并且最近的更新将符号链接设置为其默认目标。
虽然它是确实,Bash 比 Dash 重,但这对于终端来说应该不是问题(Bash 的设计目的)。
但是,非交互式 shell 仍然应该默认使用 Dash(这就是为什么/bin/sh
应该指向 Dash)。