如何使用 rpm 规范文件中的参数调用函数?

How to call function with arguments in rpm spec file?

我正在构建一个 rpm 以在我的机器上安装一个组件,但我想检查是否已经安装了某些 python 库,以免不必要地重新安装它们。所以,在我的规格文件的 %post 部分,我这样做:

function check4pythonlib() {
    library=
    if [[ $(/usr/local/bin/python2.7 -c "import $library" 2> /dev/null ; echo $?) -eq 0 ]]; then
        echo "$library is installed"
    else
        echo "$library is not installed"
        echo "Installing $library..."
        cd /path/to/lib/$library
        /usr/local/bin/python2.7 setup.py build
        /usr/local/bin/python2.7 setup.py install
    fi
}

check4pythonlib pythonlib1
check4pythonlib pythonlib2

我正在将所有输出写入日志文件,我看到了:

 is not installed
Installing ...
/usr/local/bin/python2.7: can't open file 'setup.py': [Errno 2] No such file or directory
/usr/local/bin/python2.7: can't open file 'setup.py': [Errno 2] No such file or directory
 is not installed
Installing ...
/usr/local/bin/python2.7: can't open file 'setup.py': [Errno 2] No such file or directory
/usr/local/bin/python2.7: can't open file 'setup.py': [Errno 2] No such file or directory

似乎参数没有传递给函数。我也试过用双引号将参数括起来,但它也不起作用。我该怎么做才能在 rpm 安装过程中正确传递参数,这样才能正常工作?

所以,我注意到当 运行 规范文件的那部分 set -vx 正如 Etan Reisner 所建议的那样时,会发生一些奇怪的事情......输出看起来像这样:

function check4pythonlib() {
    library=pythonlib1
    if [[ $(/usr/local/bin/python2.7 -c "import " 2> /dev/null ; echo $?) ]]; then
        echo " is installed"
    else
        echo " is not installed"
        echo "Installing ..."
        cd /path/to/lib/
        /usr/local/bin/python2.7 setup.py build
        /usr/local/bin/python2.7 setup.py install
    fi
}

很明显,参数 pythonlib1 是在函数内部生成的,但由于某种原因,我看不到分配给它的变量(在本例中为 $library)。

这就是我最后做的事情:

function check4pythonlib() {
    if [[ $(/usr/local/bin/python2.7 -c "import " 2> /dev/null ; echo $?) ]]; then
        echo " is installed"
    else
        echo " is not installed"
        echo "Installing ..."
        cd /path/to/lib/
        /usr/local/bin/python2.7 setup.py build
        /usr/local/bin/python2.7 setup.py install
    fi
}

我直接用参数替换了变量 $library,在本例中为 。脏了,但现在可以了。现在我只需要弄清楚为什么变量在规范文件中使用时似乎消失了...