无法将“python -V”的输出分配给bash中的变量

时间:2013-02-06 17:39:19

标签: bash shell

我正在编写一个shell脚本,在检查系统上的python版本后做了一些工作。

我做了一个=`python -V`和$ a的回声:

[root@machine folder]# a=`python -V`
Python 2.3.4
[root@machine folder]# echo $a

echo $a只输出

与此同时:

[root@machine folder]# if grep "2.3.4" `python -V` ; then echo "bad" ; fi
Python 2.3.4

我点击后输入它只输出python的版本,但没有别的。

为什么它会像这样?还有其他方法让我做同样的工作吗?

2 个答案:

答案 0 :(得分:5)

python -V似乎在stderr上输出。如果你运行

a=`python -V` 

输出显示在控制台上(即,它没有被子shell分配拾取)。但是,如果您将stderr重定向到stdout,那么

a=`python -V 2>&1` 

作品

答案 1 :(得分:1)

通过sys实际问Python是否值得?

 python -c "import sys; print sys.version_info[0:3]"

 (2, 7, 3)

这样就可以检查版本值,而不仅仅是检查版本。

pyver=$(python -c "import sys; print sys.version_info[0:3]")
required="(2, 7, 1)"
echo pyver=$pyver

if [[ "$pyver" > "$required" ]] ; then
    echo safe to proceed
else
    echo  require Python version ">" $required got $pyver
fi

required="(3, 0, 0)"
if [[ "$pyver" > "$required" ]] ; then
    echo safe to proceed
else
    echo  require Python version ">" $required got $pyver
fi

#-- use integer values --
echo  Integer version
# Trouble being the output looks odd but allows use of -gt
pyver=$(python -c "import sys; print '%03d%03d%03d' % sys.version_info[0:3]")
required="002007001"
echo pyver=$pyver

if [[ $pyver -gt  $required ]] ; then
    echo safe to proceed
else
    echo  require Python version $required got $pyver
fi

required="003000000"
if [[ $pyver -gt $required ]] ; then
    echo safe to proceed
else
    echo  require Python version $required got $pyver
fi

使用Python 2.7.3版在我的系统上输出

pyver=(2, 7, 3)
safe to proceed
require Python version > (3, 0, 0) got (2, 7, 3)
Integer version
pyver=002007003
safe to proceed
require Python version 003000000 got 002007003