如何使用 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
,在本例中为
。脏了,但现在可以了。现在我只需要弄清楚为什么变量在规范文件中使用时似乎消失了...
我正在构建一个 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
,在本例中为 。脏了,但现在可以了。现在我只需要弄清楚为什么变量在规范文件中使用时似乎消失了...