以用户身份运行带参数的脚本

PDS*_*tat 5 users su sudo

我试图确保在运行脚本时它作为特定用户运行,而不必在脚本运行之前 su 到该用户。该脚本还使用几个标志运行,例如

./myscript.sh -e dev -v 1.9
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法

[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` $@"
Run Code Online (Sandbox Code Playgroud)

但是 -v 标志应该是我的脚本的输入,但它正在作为 su 的输入。所以它抱怨一个无效的选项,有没有办法纠正上述问题?

注意:运行脚本的人具有 sudo 权限。

ter*_*don 6

当前用户已在变量中$USER。所以你需要的是:

[ "$USER" = "myuser" ] || sudo -u myuser $0 "$@"
Run Code Online (Sandbox Code Playgroud)

不需要,可以做你需要的一切sudo susudo您也不需要pwdor basename$0变量已经具有脚本的完整路径。

您原来的命令是启动登录 shell ( su -)。如果确实需要(这看起来很奇怪),你可以这样做:

[ "$USER" = "myuser" ] || sudo -iu myuser $0 "$@"
Run Code Online (Sandbox Code Playgroud)