sudoする時にコマンドを実行するユーザの環境変数を読む方法

例えば、ジョブスケジューラではrootでの実行しかサポートされていないが、ある特定のユーザでの実行が必要であり、かつそのユーザの環境変数を読まなくてはいけない場合。

そんな場合にはsudo -iが重宝します。

sudo -iを使用しない場合

[vagrant@localhost ~]$ grep VAL .bash_profile
export VAL=/var/tmp
[vagrant@localhost ~]$ cat list.sh
#/usr/local/bin/bash

echo $VAL
[vagrant@localhost ~]$ ./list.sh
/var/tmp
[vagrant@localhost ~]$ su -
パスワード:
[root@localhost ~]# sudo -u vagrant /home/vagrant/list.sh

[root@localhost ~]#

単純にsudo -uした場合にはコマンド実行ユーザの環境変数は読まない。

sudo -iを使用した場合

[vagrant@localhost ~]$ grep VAL .bash_profile
export VAL=/var/tmp
[vagrant@localhost ~]$ cat list.sh
#/usr/local/bin/bash

echo $VAL
[vagrant@localhost ~]$ ./list.sh
/var/tmp
[vagrant@localhost ~]$ su -
パスワード:
[root@localhost ~]# sudo -u vagrant -i /home/vagrant/list.sh
/var/tmp

sudo -uに-iオプションを付けることで、環境変数を読み込むことが出来る。