sudo保存环境变量运行指令
在使用sudo修改运行命令的权限时,默认情况下是不继承当前的环境变量的。
如果需要继承当前环境变量,需要通过-E选项继承所有或--preserve-env=list选择继承哪些环境变量。
能够继承的环境变量与/etc/sudoers设置向sudo传递的options有关。如PATH等环境变量可能受到secure_path,env_keep等sudoers内设置的影响。虽然可能并不安全,但是他们可以通过修改sudoers文件来实现传递。[1]
但是要注意的是,某些环境变量,如LD_LIBRARY_PATH(完整列表),在执行sudo时会被glibc自动取消掉。这是一种安全措施,用以防止用户将库加载到su或sudo中造成问题。他们在执行sudo前就已经被取消,所以这些环境变量必须进行手动设置。可以使用env ENV_NAME=ENV_VALUE command来在执行command前设置环境变量,如env LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test.out来设置test.out需要的动态链接库位置。[2]
参考链接:
[1] https://www.sudo.ws/docs/man/sudoers.man/
[2] https://superuser.com/questions/544518/sudo-e-not-passing-all-variables