Sudo

以使用者身份執行帶有參數的腳本

  • June 11, 2019

我試圖確保在執行腳本時它以特定使用者身份執行,而不必在腳本執行之前 su 到該使用者。此外,該腳本還使用幾個標誌執行,例如

./myscript.sh -e dev -v 1.9

我試過以下

[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` $@"

但是應該作為我的腳本輸入的 -v 標誌被作為輸入提供給 su。所以它抱怨一個無效的選項,有沒有辦法糾正上述問題?

注意:執行腳本的人有 sudo 權限。

目前使用者已經在變數中$USER。所以你只需要:

[ "$USER" = "myuser" ] || sudo -u myuser $0 "$@"

不需要,可以做你需要sudo susudo一切。您也不需要pwdor basename,該$0變數已經具有腳本的完整路徑。

您原來的命令是啟動登錄 shell ( su -)。如果真的需要(這看起來很奇怪),你可以這樣做:

[ "$USER" = "myuser" ] || sudo -iu myuser $0 "$@"

您的腳本有兩個問題:

1)您忘記了測試命令中的空格[whoami = myuser]

  1. 由於變數“$@”分兩步擴展,引用失去。

以下似乎適用於我的系統:

[ `whoami` = myuser ] || exec sudo -S -u myuser bash -- "$0" "$@"

引用自:https://unix.stackexchange.com/questions/523953