rpm%pretrans,%pre,%post等等。scriptlet部分不支持所有/ bin / sh吗?
%pretrans
[ -n "$VERBOSE" ] && echo "pretrans called with argument \`$1'" >&2
[ -n "$VERBOSE" ] && set -x
%preun
以上在安装rpm时出现以下错误
# rpm -i dist/mapr-bogus-0.0.0-1.noarch.rpm
error: %pretrans(mapr-bogus-0.0.0-1.noarch) scriptlet failed, exit status 1
如果我添加" echo你好"在条件语句下,rpm安装没有错误。是否存在关于rpm scriptlet中的短路条件的规则?
bash-4.1# rpmbuild --version
RPM version 4.8.0
bash-4.1# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.1 (Final)
Release: 6.1
Codename: Final
答案 0 :(得分:2)
RPM scriptlet失败(作为每个shell脚本)。当'$ VERBOSE'为空时,'['返回1:
<select>
<option value="10">10></option>
<option value="5">5></option>
<option value="0">Select</option>
<option value="-5">-5></option>
<option value="-10">-10></option>
</select>
因为你使用&amp;&amp;没有别的执行。所以最后一个命令退出状态码为1,因此整个scriptlet以状态码1结束。这个RPM评估该scriptlet失败。
正确的解决方案可以是:
$ [ -n "$VERBOSE" ]
$ echo $?
1
其中':'是'true'的常见别名。
答案 1 :(得分:0)
@ msuchy回答的补充:
另一种以“正确”方式抑制错误的方法,如果你在“set -e”下运行,也会起作用,就是反转测试,所以它总是如此:
[ -z "$VERBOSE" ] || echo "thingywhatsit"
如果$ VERBOSE为空,则第一次测试为真,并且不运行回声。如果它是假的,它将运行回声,并且只有当echo返回错误时才会出错。这正是你想要的。
请记住,在“if”语句之类的内容中不会触发失败:$?为0,除非“then”或“else”块中的某些内容产生错误。