簡體   English   中英

Shell腳本未將命令輸出存儲為變量

[英]shell script not storing command output as variable

我定義了一個函數來檢查是否設置了環境變量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的結果輸出到stdout而不是將其存儲到變量中。 打印整個堆棧( 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插件

python -V打印到stderr而不是stdout 您需要將標准錯誤重定向到標准輸出,否則將得到一個空字符串。

請改用local VERSION=$(python -V 2>&1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM