【发布时间】:2014-06-13 11:06:08
【问题描述】:
我在 rhel5 和 rhel6 上为 rpm 维护了一些规范文件,但我总是在规范文件中进行更复杂的测试。我经常放弃在安装时在 rpm 中执行的 perl 或 bash 脚本中编写配置逻辑。
现在我在这个简单的不相等测试中挣扎,我相信脚本逻辑接近 bash,但至少有一些适用于 bash。如果我删除它,如果测试一切正常。
echo "verifying base:%{smm_public_base} against %{smm_public}";
# if smm_public is not the same as smm_public_base we must sublink
if [ %{smm_public_base} -ne %{smm_public} ]; then
echo "smm_public_base:%{smm_public_base} is not the same as smm_public:%{smm_public} so we need to soflink it"
if [ -L %{smm_public_base ]; then
rm -rf %{smm_public_base}
fi
ln -s %{smm_public} %{smm_public_base} || :
fi
我试过了:
if [ %{smm_public_base} != %{smm_public} ]; then
和
if [ "%{smm_public_base}" != "%{smm_public}" ]; then
那些给出这样的错误
verifying base:/opt/s3public against /opt/app/s3public
/var/tmp/rpm-tmp.29711: line 60: syntax error: unexpected end of file
error: %post(secana_smm2_SEB_PROD-r250-225.x86_64) scriptlet failed, exit status 2
所以我一直在寻找关于如何在规范文件中编写脚本逻辑的入门书,但除了在 Fedora RPM guide
这里有一些最佳实践的人。 Opensuse 说看一个 redhat 包。
谢谢
【问题讨论】:
-
如果是该错误消息中提到的脚本的第 60 行?脚本是在那之后结束还是继续如你所料?我不明白这些内容如何成为问题,这听起来更像是其他东西以某种方式阻碍了脚本。你能包括错误抱怨的那个脚本的内容吗?
-
第 60 行是上面的行,如果我取消它的注释并且它的 'fi' 一切正常。我的问题是这在 bash 中有效(如果我将变量更改为对 bash 更友好的变量)。它在 rhel5.10 上
-
您建议使用
-ne测试您的逻辑不起作用,但脚本可以,并且使用!=测试您会得到EOF 的语法错误?如果您完全注释掉该测试,内部链接代码可以正常工作吗?-ne用于数字,因此它不适用于字符串也就不足为奇了(尽管我会想到它应该在输出中给你一个错误)。 -
所有建议都给出相同的错误。我试过删除 2 级 ifs。但同样的错误。这么简单的条件竟然失败了,我觉得很奇怪。
-
即使没有
if行,您也会收到 EOF 语法错误?它在我假设的那一点上把它扔到rm或ln线上?请从/var/tmp发布错误消息中提到的脚本。