
コマンドを実行すると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_reset
、env_check
および設定とenv_delete
オプションを参照してください。env_keep
-E
sudo
sudo
変数を元のシェルにエクスポートしなくても、同じ効果が得られます。
foo=bar
echo $foo
sh -c 'echo $foo'