~からhttps://stackoverflow.com/a/29400598/156458
これまでに見た他の解決策はいくつかのシステム定義に基づいていますが、実際には正しく呼び出され、
sudo
現在の環境PATH
(env
コマンドを使用)および/または残りの環境(オプションを使用)で動作します-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/defaults
PATH
-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
に格納されるために機能します。ただし、環境を構築するために引数からその値を読みます。sudo
env
sudo
PATH
env
env
<command>
ここではコマンドはenv
inで照会されますが、それ自体はavailableで照会されます。sudo
secure_path
env
<command>
$PATH