sudoでコマンドを実行することとsudoでスクリプトを実行することの違いは何ですか?

sudoでコマンドを実行することとsudoでスクリプトを実行することの違いは何ですか?

コマンドを実行するとsudo変数の値がエコーされますが、スクリプトで同じコマンドを実行するとそうでsudoないのはなぜですか?

➜ echo "$XDG_CONFIG_HOME"
/Users/cc/.config

➜ sudo echo "$XDG_CONFIG_HOME"
/Users/cc/.config

➜ cat sample.sh
#!/usr/bin/env sh

echo "$XDG_CONFIG_HOME"


➜ ./sample.sh
/Users/cc/.config

➜ sudo ./sample.sh


PS:Linuxでもこれを試してみましたが、同様の結果が出ました。

ベストアンサー1

では、sudo echo "$XDG_CONFIG_HOME"シェルは変数を実行する前に変数を展開し、正しくsudo実行されていることをsudo確認します。echo /Users/cc/.config

では、スクリプトを実行するためにシェルが起動され、次にsudo ./sample.shシェルsudoが拡張を実行します。これで、設定に応じてsudo環境変数を削除して、特権コマンドがコマンドを受信しないようにすることができます。

env_resetenv_checkおよび設定とenv_deleteオプションを参照してください。env_keep-Esudo

sudo変数を元のシェルにエクスポートしなくても、同じ効果が得られます。

foo=bar
echo $foo
sh -c 'echo $foo'

おすすめ記事