我试图确保在运行脚本时它作为特定用户运行,而不必在脚本运行之前 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 权限。
当前用户已在变量中$USER
。所以你需要的是:
[ "$USER" = "myuser" ] || sudo -u myuser $0 "$@"
Run Code Online (Sandbox Code Playgroud)
不需要,可以做你需要的一切sudo su
。sudo
您也不需要pwd
or basename
,$0
变量已经具有脚本的完整路径。
您原来的命令是启动登录 shell ( su -
)。如果确实需要(这看起来很奇怪),你可以这样做:
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "$@"
Run Code Online (Sandbox Code Playgroud)