微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – Bash完成抛出语法错误

问题:

假设我正在尝试更改为名为“build”的目录,该目录位于我当前所在的目录中.我开始:

cd b

然后我按Tab键一次(知道当前的目录中没有其他目录以字母b开头).我希望能看到以下内容,随时准备让我根据需要点击返回或更改或扩充.

cd build

但是,在运行Linux Peppermint 3的上网本上,我发现按下标签按钮会出现这种情况:

cd bbash: command substitution: line 74: Syntax error near unexpected token `done'
bash: command substitution: line 74: `            done'

我试过的事:

>我已经尝试重新安装“bash-completion”软件包,但这没有明显的效果.
>我已经查看了文件/ etc / bash_completion,特别是在第74行,但我看不出任何明显需要纠正的内容(完成-f -X’* .Z’压缩znew).也许我在找错了文件.
>我发现git,gedit和节点等命令的完成没问题.但是尝试为kate自动完成文件名也不起作用.
>当我运行bash -x进行调试时,在终端中打印了很多代码,最后一点(请注意注释):

+ toks=(${toks[@]-} $(
    compgen -d -- "$quoted" | {
        while read -r tmp; do
            # Todo: I have removed a "[ -n $tmp ] &&" before 'printf ..',
            #       and everything works again. If this bug suddenly
            #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),
            #       remember to check for other similar conditionals (here
            #       and _filedir_xspec()). --David
            printf '%s\n' $tmp
        done
    }
))
bash: command substitution: line 74: Syntax error near unexpected token `done'
bash: command substitution: line 74: `            done'

我尝试添加后面提到的条件,但这没有效果.
>我试过暂时删除etc / bash_completion.d但这没有效果.
>我已经尝试完成-p来查看完成列表,但我真的不知道我在寻找什么.

一个最后的PLEA

如果需要的话,我愿意用shell脚本弄脏自己.在此过程中,我可以了解更多相关信息.我真的会修复它.任何建议赞赏.

解决方法:

Bash完成是模块化的;不同的包提供自己的完成扩展.另一个包可能包含bug.试试mv /etc/bash_completion.d{,.old},看看是否能修复它.如果是这样,请执行mv /etc/bash_completion.d{.old,}将其再次移回,然后将各个文件逐个移出/etc/bash_completion.d目录,以识别导致问题的文件. (在Peppermint上,目录可能被称为略有不同.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐