我正在构建一个rpm来在我的机器上安装组件,但是我想检查是否已经安装了某些python库,以免不必要地重新安装它们。所以,在我的spec文件的%post
部分,我正在这样做:
function check4pythonlib() {
library=$1
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安装期间正确传递参数,以便这样做?
答案 0 :(得分:0)
所以,我注意到当Etan Reisner建议使用set -vx
运行spec文件的那一部分时,会出现一些奇怪的结果......输出看起来像这样:
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 $1" 2> /dev/null ; echo $?) ]]; then
echo "$1 is installed"
else
echo "$1 is not installed"
echo "Installing $1..."
cd /path/to/lib/$1
/usr/local/bin/python2.7 setup.py build
/usr/local/bin/python2.7 setup.py install
fi
}
我直接用参数替换变量$library
,在本例中为$1
。很脏,但现在它有效。现在我只需要弄清楚为什么变量在spec文件中使用时似乎消失了......