su - user -c env は -l を追加しないと環境変数を取得できません。

su - user -c env は -l を追加しないと環境変数を取得できません。

私は今問題に直面していますが、私はLinuxに初めて遭遇したので、何が起こっているのかわかりません。

rootで実行する必要があるスクリプト(そのようにすることは許可されていないため公開しません)を実行しようとしていますが、実行すると必要な権限がないと実行されないことがわかります。環境変数を設定する必要があります。しかし、スクリプトはそうする必要があります。

2つのボックスにインストールしましたが、1つは正しく機能し、もう1つは機能しません。タスクボックスでこのコマンドを実行すると、
su - user -l -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
正しいパスが返されます。

別のボックスで実行すると、結果は返されません。ただし、-lと-lを切り替えると正しいパスが返されます。

ここで何が間違っているかを正しい方向に伝えることができる人はいますか?残念ながら、問題が解決することを確認するためにボックス内のすべてをアップグレードすることはできません。しかし、現在のところ、手がかりがないので、範囲を狭めることができれば多くの助けになります。より多くの情報が必要な場合は、私が提供できることを願っています(もちろん来週になるかもしれません)。

注:実際のスクリプトでは、-lはまったく存在しません。
if ["$myself" = "root"]; then
ENVVARIABLE=`su - $user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
fi

編集1:両方のシステムのユーザーは同じシェルを使用します。

答え1

警告:Linuxのsuは、すべてのシステムで同じではない可能性があります。いつものように、man su答えを与えなければなりません。あなたのオプションとバージョン。

通信環境条件:

  1. コマンドによる変数のエクスポートexport ENVVARIABLE
  2. suは環境を保存するように指示されます。ここ(Debian 9)では、-m、-p、--preserve-environmentオプションを使用して実行できます。

だからこれはここで動作します:

su -m - user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'

関連情報