我在脚本中设置了以下变量。
SU="/bin/su -s /bin/sh
WSO2_SCRIPT="JAVA_HOME=$JAVA_HOME /opt/autopilot/wso2is/bin/wso2server.sh"
WSO2_USER=autoplt
这部分剧本值得关注:
if [ "$RETVAL" -eq "0" ]; then
if [ "$(whoami)" != "${WSO2_USER}" ]; then
$SU - $WSO2_USER -c "${WSO2_SCRIPT} start" >> ${WSO2_LOG} 2>&1 || RETVAL="4"
else
${WSO2_SCRIPT} start >> ${WSO2_LOG} 2>&1 || RETVAL="4"
fi
fi
如果我是root用户,则执行以下命令:
/bin/su -s /bin/sh - autoplt -c 'JAVA_HOME=/usr/java/latest /opt/autopilot/wso2is/bin/wso2server.sh start'
和
RETVAL
将评估为0.
当我是用户autoplt时,执行以下命令:
JAVA_HOME=/usr/java/latest /opt/autopilot/wso2is/bin/wso2server.sh start
然而
RETVAL
会被评估为4吗?
它们不是相同的命令吗?在每种情况下,不应该将RETVAL设为0吗?
当我在shell中以autoplt用户身份运行命令时,该命令成功执行。
因此我写的方式有问题吗?
答案 0 :(得分:0)
行中使用的双管||
:
$SU - $WSO2_USER -c "${WSO2_SCRIPT} start" >> ${WSO2_LOG} 2>&1 || RETVAL="4"
${WSO2_SCRIPT} start >> ${WSO2_LOG} 2>&1 || RETVAL="4"
表示如果第一个命令成功,则第二个命令不会被执行 这意味着当以root身份运行时,它会成功,然后不会更改为RETVAL 作为用户,如果失败,则将RETVAL更改为4