сценарий оболочки не хранит вывод команды как переменную - PullRequest
0 голосов
/ 28 мая 2018

Я определил функцию, чтобы проверить, установлена ​​ли переменная окружения VIRTUAL_ENV, и, если это так, выяснить текущую версию Python.

theme_python_prompt () {
    if [ -v VIRTUAL_ENV ]
    then
        local VERSION="$(python -V)"
        echo -n "%{$fg[yellow]%}%{$reset_color%}:${VERSION}(%{$fg[magenta]%}$(basename ${VIRTUAL_ENV})%{$reset_color%})"
    fi
}

Но это просто вывод результата python -V в стандартный вывод вместо сохранения в переменной.Печать всей стопки (set -x) показывает следующее:

+theme_python_prompt:1> [ -v VIRTUAL_ENV ']'                                   
+theme_python_prompt:3> python -V                    
Python 2.7.15                          
+theme_python_prompt:3> echo ''         
+theme_python_prompt:3> local VERSION=''
+theme_python_prompt:4> basename /home/hjpotter92/.virtualenvs/test-2fI9Fep8
+theme_python_prompt:4> echo -n $'%{\C-[[33m%}%{\C-[[00m%}:(%{\C-[[35m%}test-2fI9Fep8%{\C-[[00m%})'

Аналогичная функция для извлечения меня rbenv информация работает без проблем:

theme_rbenv_prompt () {
    if ! type rbenv > /dev/null
    then
        echo -n ""
    else
        local VERSION="$(rbenv_prompt_info)"
        [ "$VERSION" != "system" ] && echo "%{$fg_bold[red]%}%{$reset_color%}:${VERSION} " || echo -n ""
    fi
}

где rbenv_prompt_infoэто от oh-my-zsh плагин .

1 Ответ

0 голосов
/ 28 мая 2018

python -V печатает до stderr, а не stdout.Вам необходимо перенаправить стандартную ошибку на стандартный вывод, в противном случае вы получите пустую строку.

Используйте взамен local VERSION=$(python -V 2>&1).

...