使用 su 以非 root 身份运行 CI 命令

使用 su 以非 root 身份运行 CI 命令

我们的 CI 服务器使用全部以 root 身份运行的 docker 镜像。现在我有一个无法以 root 身份运行的 Maven 构建,因此我尝试构建此包装器脚本来创建用户、从 root 复制 Maven 设置,然后运行脚本。

这是我所拥有的

#! /bin/bash -ex

useradd -m nonroot
cp -R /root/.m2 /home/nonroot/.m2
chown -R nonroot /home/nonroot/.m2
su nonroot -c "$@"

问题是:当我以 调用此脚本时./nonroot.sh mvn clean install,它只执行mvn,而不执行mvn clean install。我该如何修复此问题?

答案1

注意,您sudo -u nonroot通常可以使用来运行命令,但如果您需要使用,su这里有一种方法可以传递命令和参数而不会丢失空格等:

su nonroot -c '"$@"' dummy "$@"

这利用了 bash 接受参数的方式-c并使用它们来设置$1等。例如:

bash -c 'echo $*' 1 2 3

结果输出为2 3,因为第一个参数被视为程序名。所以我们让 bash 运行命令"$@",然后传递真正的参数。

相关内容