当我启动新终端时,这台 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 无法处理数组。它失败了,因为别名正在扩展并且()
在那里没有意义。