0

私は Mac Snow Leopard を使用しています。Python は からインストールされhomebrew、動作しています。2 つのカスタム bash 完了スクリプトがpipありdjangoます。以前は機能していましたが、ドットファイルをいじった後は機能しなくなりました。

djangoの完成は元のプロジェクトからのもので、pip completion(ここから) を以下に示します。

_pip() {
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    commands=$(pip --help | awk '/Commands\:/,/General Options\:/' | \
               \grep -E -o "^\s{2}\w*" | tr -d ' ')
    opts=$(pip --help | \grep -E -o "((-\w{1}|--(\w|-)*=?)){1,2}")

    if [ $COMP_CWORD == 1 ] ; then
        COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
        return 0
    fi

    if [[ ${cur} == -* ]] ; then
        local command_opts=$(pip $prev --help | \
                             \grep -E -o "((-\w{1}|--(\w|-)*=?)){1,2}")
        COMPREPLY=( $(compgen -W "${command_opts}" -- ${cur}) )
        return 0
    fi
}

complete -o default -F _pip pip

ERRORS: Django の補完は、私がそれを入手するたびにこれをスローします:

complete: usage: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]

したがって、基本的には構文の問題であるはずです。Iのpip completionときは何もしませんpip + TAB

ポイントは、どちらも機能していたということですが、何が起こったのかわかりません。関数が組み込みのbashであることを理解したのでcomplete、bashを台無しにせず、ドットファイルのみ..手がかりはありますか?

4

1 に答える 1

0

これは、一部のコマンドと GNU/BSD のコマンドの Apple 実装に関係していることが判明しました。

brew から grep をインストールして、pip 補完を解決しました。

brew install grep --default-names

これにより、GNUgrepが /usr/local/bin/grep の下にインストールされます。これは、前にある場合の代わりに--default-names呼び出されることを意味します。または、Apple バージョンの よりも優先されます。grepggrep/usr/local/bin$PATH/bin/usr/bingrep

djangoの補完では、問題はwhereisコマンドから発生していました:

unset pythons
if command -v whereis &>/dev/null; then
    python_interpreters=$(whereis python | cut -d " " -f 2-)
    for python in $python_interpreters; do
        pythons="${pythons} ${python##*/}"
    done
    pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
else
    pythons=python
fi
complete -F _python_django_completion -o default $pythons

私はpythonを台無しにして/usr/bin/python、もう存在しない古いインストールを指していました。(私の場合)リンクを修正して、brewからインストールされたpythonを指すようにしましたが、すべて正常に動作します。

于 2014-05-20T09:21:52.903 に答える