0

我在 Mac Snow Leopard 上,安装了 pythonhomebrew并且它正在工作,我有两个自定义 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

错误: 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 ...]

所以基本上它应该是一个语法问题。我pip completion什么也不做pip + TAB

关键是他们都曾经工作过,但我不知道会发生什么。据我了解,该complete功能是内置的 bash,我没有搞砸 bash,只有点文件..有什么线索吗?

4

1 回答 1

0

事实证明,这与 Apple 对某些命令的实现与 GNU/BSD 的实现有关。

我确实通过从 brew 安装 grep 解决了 pip 完成问题:

brew install grep --default-names

这会将 GNU 安装grep在 /usr/local/bin/grep 下,这--default-names意味着它将被调用grep,而不是ggrep如果/usr/local/bin在你$PATH之前的版本中,/bin或者/usr/bin它将优先于苹果版本的grep.

对于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 回答