这两个命令有什么区别

时间:2015-04-08 14:52:39

标签: linux unix

我在脚本中设置了以下变量。

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用户身份运行命令时,该命令成功执行。

因此我写的方式有问题吗?

1 个答案:

答案 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