每次打开新终端时,是否抑制bash_completion中的语法错误或警告?

每次打开新终端时,是否抑制bash_completion中的语法错误或警告?,bash,suppress-warnings,bash-completion,Bash,Suppress Warnings,Bash Completion,我在我的.bashrc文件中启用了bash\u完成。现在,每次启动终端时,它都会向我显示以下警告: bash: [: too many arguments bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: too many arguments /etc/bash_completion.d/gcc: line 50: [: too many arguments /etc/bash_co

我在我的
.bashrc
文件中启用了
bash\u完成。现在,每次启动终端时,它都会向我显示以下警告:

bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: too many arguments
/etc/bash_completion.d/gcc: line 50: [: too many arguments
/etc/bash_completion.d/ifupdown: line 3: [: =: unary operator expected
/etc/bash_completion.d/ifupdown: line 19: [: =: unary operator expected
/etc/bash_completion.d/man: line 3: [: too many arguments
有关详细信息,我运行了以下命令:

$ bash .bashrc
它向我展示了这个警告:

bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: too many arguments
/etc/bash_completion.d/gcc: line 50: [: too many arguments
/etc/bash_completion.d/ifupdown: line 3: [: =: unary operator expected
/etc/bash_completion.d/ifupdown: line 19: [: =: unary operator expected
/etc/bash_completion.d/man: line 3: [: too many arguments
/etc/bash_completion.d/gcc
第50行:

[ $USERLAND = GNU -o $UNAME = Cygwin ] && \
我不明白这里有什么问题?如何在终端开始时禁止出现这些警告

编辑:

我按照Adrian的建议运行了
bash-xv.bashrc
,并在输出中发现了以下内容:

+++ '[' = GNU -o Linux = Cygwin ']'
/etc/bash_completion.d/gcc: line 50: [: too many arguments
.
.
.
+++ '[' = GNU ']'
/etc/bash_completion.d/ifupdown: line 3: [: =: unary operator expected
+++ '[' = GNU ']'
/etc/bash_completion.d/ifupdown: line 19: [: =: unary operator expected
编辑:2

bash-x/etc/bash|u completion | grep-E'UNAME | USERLAND'

++ UNAME=Linux
++ UNAME=Linux
++ unset UNAME RELEASE default dirnames filenames have nospace bashdefault plusdirs

在与您一起排除故障后,我非常确信
/etc/bash_completion.d
中的文件属于较旧版本的
bash completion
,因此与您安装的
/etc/bash_completion
版本不兼容(反之亦然)

我建议完全卸载
bash completion

$ sudo apt-get purge bash-completion
$ sudo apt-get install bash-completion
以及验证之后是否没有留下任何文件:

$ find /etc/bash_completion*
如果存在,请手动删除它们

之后重新安装bash完成

$ sudo apt-get purge bash-completion
$ sudo apt-get install bash-completion

这可能是因为
$USERLAND
$UNAME
为空,请使用
bash-xv
进行调试以查看引擎盖下发生了什么。你使用的是什么系统?@AdrianFrühwirth,我使用的是Ubuntu 12.04。我会试一试。@AdrianFrühwirth如果它抱怨太多的参数,那将表明
$USERLAND
$UNAME
包含多个单词。我很惊讶它们没有被引用。有点讽刺的是,
bash
完成文件有一个bug,因为它使用了写得很差的POSIX兼容shell,而不是
bash
扩展名
[$USERLAND=GNU | |$UNAME=Cygwin]
@TomFenech No,这两种情况都可能是由于解析的方式,但预期的
=:一元运算符
提示左侧未设置<代码>[=FOO]=>
-bash:[:=:应为一元运算符
[=FOO-o=BAR]
=>
-bash:[:参数太多了
。我执行了
清除
,搜索了
bash\u completion*
bash\u completion.d
目录中仍然存在一些文件。但是,给出上述错误的三个文件都不存在。我估计这些剩余的文件是在我手动插入时由其他程序添加的统计它们(例如,
git
surfraw
)。那么我也要删除这些吗?如果是的话,它们会在我安装
bash completion
@udiboy有效点时重新安装吗?不,你不想碰这些。现在尝试重新安装。是的!错误解决了!非常感谢!好的,现在
bash\u completion
UNAME
之后有
USERLAND
声明。我想知道为什么
--重新安装
删除
后安装不可用working@udiboy因为
remove
(与
purge
)不接触配置文件,因为这些脚本位于
/etc
中,所以它们没有被删除。很好,它起作用了:-)