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
的结果输出到标准输出,而不是将其存储到变量中。打印整个堆栈 (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 plugin.
python -V
打印到 stderr
,而不是 stdout
。您需要将标准错误重定向到标准输出,否则您将得到一个空字符串。
改用local VERSION=$(python -V 2>&1)
。
我已经定义了一个函数来检查是否设置了环境变量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 plugin.
python -V
打印到 stderr
,而不是 stdout
。您需要将标准错误重定向到标准输出,否则您将得到一个空字符串。
改用local VERSION=$(python -V 2>&1)
。