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

Jav*_*eme 7 linux bash bash-completion

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

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

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

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

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

$> ./foo --arg <TAB>

rap*_*aëλ 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-###
Run Code Online (Sandbox Code Playgroud)