sudo-edスクリプトがsudo -uを無視しているようです。行プレフィックス

sudo-edスクリプトがsudo -uを無視しているようです。行プレフィックス

私が知っている限り、sudo -u <user>継承されたsudoを「キャンセル」し、通常のユーザーとして次の行を実行するためにsudoとして実行されるスクリプトでこれを使用できます。少なくとも以下の文脈ではそうではありません。sudo -u <user>何もしないようです!

これを説明するために、2つの単純なBashスクリプト、スクリプトmaster.shslave.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。削除された環境変数を魔法のように復元することはできません。

関連情報