当我打开终端时,来自 /usr/share/bash-completion/bash-completion 的源命令错误

Tar*_*lpe 6 command-line bash

当我打开终端时,出现以下错误:

bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'
Run Code Online (Sandbox Code Playgroud)

这是因为bash-completion文件的这个区域:

_upvar()
{
    if unset -v "$1"; then           # Unset & validate varname
        if (( $# == 2 )); then
            eval $1=\"\$2\"          # Return single value
        else
            eval $1=\(\"\${@:2}\"\)  # Return array
        fi
    fi
}
Run Code Online (Sandbox Code Playgroud)

为什么我在那部分出错?

mur*_*uru 3

我认为这可能与U&L 帖子相同的问题:您有一个fi. 该脚本在大多数情况下都很好,但别名 shell 关键字可能会导致意外问题:

$ alias fi=find
$ . /usr/share/bash-completion/bash_completion
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'
Run Code Online (Sandbox Code Playgroud)

尽管该函数位于第 170 行左右,但它是该文件中第一个使用fi. 根据您放置此别名定义的确切位置,以及 bash 源的 bash 完成脚本的确切位置,这可能是设置别名后第一次使用fi