sudo 後の環境変数を設定する方法たち

調べた結果 4 つの方法でできました。

export ENV=VAL
sudo -E command
  • sudoers に evn_keep を指定する
$ sudo cp /etc/sudoers sudoers.bac
$ sudo visudo
$ sudo diff -u sudoers.bac /etc/sudoers
--- sudoers.bac        2018-03-16 20:28:53.668295300 +0900
+++ /etc/sudoers   2018-03-16 20:29:29.756458100 +0900
@@ -9,6 +9,7 @@
 Defaults       env_reset
 Defaults       mail_badpass
 Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+Defaults       env_keep += "ENV"

 # Host alias specification

$ export ENV=VAL
$ sudo command
sudo bash -c 'ENV=VAL command'
  • sudo 先のユーザーの .bashrc などに設定後、 -i オプションを付けて sudo を実行する。
echo 'export ENV=VAL'  | sudo tee /root/.bashrc
sudo -i command

個人的には、いろいろ試しているときには一時環境変数を使って、ちゃんとコマンドなどを作るときは env_keep を設定するのがいいのかなと思いました。

env_keep で引き継ぐ変数を一覧する方法

sudo sudo -V で確認できます。

改訂履歴

  • 2018/03/16 参考文献・env_keep確認方法の追加