私は、スクリプトが実行されるときに、スクリプトが実行される前にそのユーザーに訴える必要なしに、特定のユーザーとして実行されることを確認しようとしています。また、スクリプトは、たとえばいくつかのフラグを使用して実行されます
./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]"