bash su 在初始化脚本中带有参数

标签 bash init su

在 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/

相关文章:

Android init.rc 在服务退出时触发

python - 通过 Python 脚本更改用户 (su) (pexpect, popen...)

MYSQL:如何检查退出状态?

bash - alias hello ='echo Hello' - 为什么这在重启后不起作用?

java - 后台、Java 和初始化脚本

ios - 编程初始化

java - "su <otheruser>"失败,返回 "standard in must be atty"

linux - 在 Bash 中检查 sudo(带有 if 语句的脚本)

bash - 获取仅具有显示名称的服务主体客户端 ID

linux - 如何快速汇总文件中的所有数字?