在 init 脚本中,我想使用不同的用户调用另一个脚本(在本例中是来自 tomcat 的 catalina.sh)并传递其他参数。
我尝试过这样的事情:
if [ $USER == "root" ]
then
CMD="/bin/su ${TOMCAT_USER} -c"
fi
$CMD $CATALINA_HOME/bin/catalina.sh stop 20 -force
但是,这会因“停止”而失败,并且其他参数被视为单个文件,而不是作为脚本的参数,并且该文件显然不存在。我尝试通过使用“$(printf())”构建必要的命令来解决这个问题,但一直无法找到可行的解决方案。我有什么想法可以将附加参数传递给该脚本吗?
编辑:
提供更多上下文,以防当前用户已经是所需的用户。这是一个丑陋的解决方法,似乎可以解决问题:
if [ $USER == "root" ]
then
CMD="/bin/su ${TOMCAT_USER} -c '"
PST="'"
elif [ $USER == "${TOMCAT_USER}" ]
then
CMD=''
PST=''
else
exit 1
fi
bash -c "$CMD$CATALINA_HOME/bin/catalina.sh stop 20 -force$PST"
最佳答案
使用以下两种方法中的任何一种来运行命令行:
bash -c "$CMD '$CATALINA_HOME/bin/catalina.sh stop 20 -force'"
或者
eval "$CMD '$CATALINA_HOME/bin/catalina.sh stop 20 -force'"
关于bash su 在初始化脚本中带有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731003/