sudoの環境変数を保存する次の方法が機能しないのはなぜですか? [閉鎖]

sudoの環境変数を保存する次の方法が機能しないのはなぜですか? [閉鎖]

~からhttps://stackoverflow.com/a/29400598/156458

これまでに見た他の解決策はいくつかのシステム定義に基づいていますが、実際には正しく呼び出され、sudo現在の環境 PATHenvコマンドを使用)および/または残りの環境(オプションを使用)で動作します-E

sudo -E env "PATH=$PATH" <command> [arguments]

実際にそれを使用してエイリアスを作成できます。

alias mysudo='sudo -E env "PATH=$PATH"'

sudo(元の名前を置き換えてエイリアス自体の名前を指定することもできますsudo。)

一方

-E, --preserve-env ユーザーが既存の環境変数を保存したいことを示すセキュリティポリシーです。ユーザーが環境を保護する権限を持っていない場合、セキュリティポリシーはエラーを返す可能性があります。

次がうまくいかない理由を知りたいです。

sudo -E <command> [arguments]

これも"PATH=$PATH" <command> [arguments]コマンドであることを考えると、次のことがうまくいかない理由がわかります。

sudo  "PATH=$PATH" <command> [arguments]

ありがとうございます。

ベストアンサー1

sudo -E <command> [arguments]

DebianはEven withの値をsecure_pathオーバーライドすることを定義しているため、あなたの場合は機能しません。/etc/defaultsPATH-E

sudo  "PATH=$PATH" <command> [arguments]

PATH=$PATH認識され処理されるため、有効でなければなりませんsudo。私の場合、sudo "PATH=$PATH" env現在のPATH値が表示されます。 (これはPATH=$PATH <command>普遍的に認識されるコマンドではありません。これはシェルおよびで認識される設定に対応しますsudoが、他のコンテキストでは必ずしもそうではありません。)

ただし、クエリ自体にはsudo使用しませんが、それでも使用します。$PATH<command>secure_path

sudo -E env "PATH=$PATH" <command> [arguments]

これは、thenに示されているように、現在の"PATH=$PATH"値がコマンドPATHに格納されるために機能します。ただし、環境を構築するために引数からその値を読みます。sudoenvsudoPATHenvenv<command>

ここではコマンドはenvinで照会されますが、それ自体はavailableで照会されます。sudosecure_pathenv<command>$PATH

おすすめ記事