私が知っている限り、sudo -u <user>
継承されたsudoを「キャンセル」し、通常のユーザーとして次の行を実行するためにsudoとして実行されるスクリプトでこれを使用できます。少なくとも以下の文脈ではそうではありません。sudo -u <user>
何もしないようです!
これを説明するために、2つの単純なBashスクリプト、スクリプトmaster.sh
とslave.sh
スクリプトを使用します。
master.sh:
#!/bin/bash
sudo -u dad /home/dad/Downloads/slave.sh
スレーブ.sh:
#!/bin/bash
if [[ ! -v DOTNET_ROOT ]] # If variable is not set ...
then
echo "DOTNET_ROOT needs to be set ..."
else
echo "No need to set DOTNET_ROOT."
fi
さまざまなシナリオを実行したときに発生する状況は次のとおりです。
dad@DadsGram~/Downloads $ echo $DOTNET_ROOT
/home/dad/.dotnet
dad@DadsGram~/Downloads $ ./slave.sh
No need to set DOTNET_ROOT.
dad@DadsGram~/Downloads $ sudo ./master.sh
DOTNET_ROOT needs to be set ...
dad@DadsGram~/Downloads $ sudo ./slave.sh
DOTNET_ROOT needs to be set ...
私は何が間違っていましたか?
答え1
2番目は、sudo
前の項目を「キャンセル」せずにsudo
前の項目を上書きします。それは帽子を脱ぐのではなく、かつらを帽子にかぶせるのと同じです。
sudo
これが環境変数削除の副作用があることをご存知のようです。 (注:そうではありません。基本的なそのために、sudo
自分が理解したことと達成したいことが何であるかをより明確に説明できれば良いと思います。 )2番目はsudo
最初のUID設定を上書きします。環境全体を最初の以前の状態に復元することはできませんsudo
。削除された環境変数を魔法のように復元することはできません。