LC_CTYPE 打破自动完成:这个问题的原因是什么?

TAB*_*ess 13 bash autocomplete locale

今天出于某种原因,每次我在终端中点击 tab 时,都会出现:

cat bash: warning: setlocale: LC_CTYPE: cannot change locale (en_CA)

Display all 150 possibilities? (y or n)
Run Code Online (Sandbox Code Playgroud)

当我输入cat然后点击 TAB时,会发生这种特殊情况。我从来没有改变任何设置或任何东西。有谁知道这是怎么回事?

小智 7

我有一种预感,你的 bash_completion 正在导致这种情况发生。尝试通过执行以下操作暂时清除您的 bash 完成(直到您退出):

complete -r
Run Code Online (Sandbox Code Playgroud)

如果这清除了它,那么它就是 bash 完成的东西,如果不是,它仍然可能是 bash 内置程序之一


小智 5

通过 SSH 连接到远程服务器时出现类似问题(在我的本地安装 oh-my-zsh 之后,但我不确定这是否相关)。要解决这个问题,

在我的本地机器上,我编辑了 /etc/ssh/ssh_config 文件,注释了 SendEnv 行

#SendEnv LANG LC_*
Run Code Online (Sandbox Code Playgroud)

选项卡完成现在可以在远程机器上没有警告的情况下工作

bash: 警告: setlocale: LC_CTYPE: 无法更改语言环境