私は、スクリプトが実行されるときに、スクリプトが実行される前にそのユーザーに訴える必要なしに、特定のユーザーとして実行されることを確認しようとしています。また、スクリプトは、たとえばいくつかのフラグを使用して実行されます
./myscript.sh -e dev -v 1.9
私は次のことを試しました
[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` [email protected]"
しかし、私のスクリプトへの入力であるはずの-vフラグは、suへの入力として供給されています。それで、それは無効なオプションについて不平を言います、上記を修正する方法はありますか?
注意:スクリプトを実行している人にはsudo権限があります。
承認された回答:
現在のユーザーはすでに変数$USER
にあります 。したがって、必要なのは次のとおりです。
[ "$USER" = "myuser" ] || sudo -u myuser $0 "[email protected]"
sudo su
は必要ありません 、sudo
あなたが必要とするすべてを行うことができます。 pwd
も必要ありません またはbasename
、$0
変数にはすでにスクリプトへのフルパスがあります。
元のコマンドはログインシェルを開始していました(su -
)。それが本当に必要な場合(奇妙に思えます)、次のことができます:
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "[email protected]"