Ubuntu 给我换 shell

Ubuntu 给我换 shell

当我启动新终端时,这台 Ubuntu 机器显示错误。问题是这样的:

当 bash 完成是源自 ( . /usr/share/bash-completion/bash_completion) 时,shell 不会发生bash,并且一些带有列表的变量定义local words=()失败(因为只bash理解列表)。

我的解决方案是显式调用 with bash /usr/share/bash-completion/bash_completion,但我想知道为什么当我打开终端时会调用另一个 shell。我认为,由于 bash 是我的默认设置,因此在采购过程中也会使用它。

我在调用 bash-completion 文件之前做了一个echo $0,输出是bash.

什么会导致 bash 不用于采购?

解决评论中的问题:

当我启动一个新的控制台时会发生这种情况,这意味着内核将启动一个新的终端窗口,调用~/.profile,它依次执行 a . "$HOME/.bashrc",这又将获取 bash 补全 ( . /usr/share/bash-completion/bash_completion)

我没有~/.bash_completion文件。

我无法将 放入echo "$0"bash_completion 内部,因为它会失败并且不会被执行。

my.bashrc.profile是Ubuntu 自带的默认的。我没有.bash_profile。您可以在本地 Ubuntu 14.04 下找到它们/etc/skel/

答案1

问题不在于 shell 或 chsh 或任何外来的东西。这是本地的一个愚蠢的别名。有人认为创建一个显示本地 IP 地址的别名是个好主意,并将其命名为“local”,因此该行

local cword words=()

失败并不是因为 shell 无法处理数组。它失败了,因为别名正在扩展并且()在那里没有意义。

相关内容