参数中路径的Bash完成(存在等号)

时间:2013-12-04 01:54:16

标签: linux bash bash-completion

我曾经能够输入以下内容:

$> ./foo --arg =< TAB>

foo是我写的任何程序,它会给我一个当前目录中的文件列表,就像tab-completion通常一样。我没有必要对/ etc / bash_completion进行任何更改。

然而,最近,由于一些未知的原因,这已经消失了。有谁知道如何重新启用此功能?

FWIW,这仍然是正确的事情(注意缺少等号):

$> ./foo --arg< TAB>

3 个答案:

答案 0 :(得分:8)

我删除了所有bash完成脚本并开始逐个添加它们,如果它们中的任何一个导致问题。

在我的情况下,结果是npm完成脚本是导致此问题的原因。

不确定(还)问题是什么,但这是完成脚本导致等号值不像以前那样工作:

    ###-begin-npm-completion-###
    #
    # npm command completion script
    #
    # Installation: npm completion >> ~/.bashrc  (or ~/.zshrc)
    # Or, maybe: npm completion > /usr/local/etc/bash_completion.d/npm
    #

    COMP_WORDBREAKS=${COMP_WORDBREAKS/=/}
    COMP_WORDBREAKS=${COMP_WORDBREAKS/@/}
    export COMP_WORDBREAKS

    if type complete &>/dev/null; then
      _npm_completion () {
        local si="$IFS"
        IFS=$'\n' COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \
                               COMP_LINE="$COMP_LINE" \
                               COMP_POINT="$COMP_POINT" \
                               npm completion -- "${COMP_WORDS[@]}" \
                               2>/dev/null)) || return $?
        IFS="$si"
      }
      complete -F _npm_completion npm
    elif type compdef &>/dev/null; then
      _npm_completion() {
        si=$IFS
        compadd -- $(COMP_CWORD=$((CURRENT-1)) \
                     COMP_LINE=$BUFFER \
                     COMP_POINT=0 \
                     npm completion -- "${words[@]}" \
                     2>/dev/null)
        IFS=$si
      }
      compdef _npm_completion npm
    elif type compctl &>/dev/null; then
      _npm_completion () {
        local cword line point words si
        read -Ac words
        read -cn cword
        let cword-=1
        read -l line
        read -ln point
        si="$IFS"
        IFS=$'\n' reply=($(COMP_CWORD="$cword" \
                           COMP_LINE="$line" \
                           COMP_POINT="$point" \
                           npm completion -- "${words[@]}" \
                           2>/dev/null)) || return $?
        IFS="$si"
      }
      compctl -K _npm_completion npm
    fi
    ###-end-npm-completion-###

答案 1 :(得分:1)

不确定您所处的环境,但最近的CentOS

complete -D -o default

在令牌没有空格作为默认值后启用文件名完成。要在另一个方向切换它:

complete -D -o nospace

但是,看起来内置版本的旧版本没有-D选项。

答案 2 :(得分:1)

我使用https://github.com/ai/rake-completion解决了Ubuntu 12.04的同样问题。 你需要

  1. 下载文件wget -O ~/scripts/rake https://raw.githubusercontent.com/ai/rake-completion/master/rake
  2. 添加到.bashrc:. ~/scripts/rake
  3. 或者您可以在该页面上使用其他方式之一。