EC2实例使用sudo运行程序时.bashrc配置的环境变量不生效如何解决
成因
- sudo 默认启用了
env_reset配置(定义在/etc/sudoers文件中),执行命令时会重置环境变量,仅保留少量系统判定为安全的变量,普通用户自定义的环境变量默认不在保留列表内。 - 你写入当前用户
~/.bashrc的配置属于用户级交互式shell的专属配置,sudo 默认以 root 身份执行命令,不会主动加载普通用户的.bashrc文件。
可行解决方案
临时保留当前用户全部环境变量执行
执行命令时添加-E参数即可保留当前用户的所有环境变量:sudo -E nodemon app.js注意:如果
/etc/sudoers中配置了env_delete或者对特定变量有保留限制,该方式可能不生效。执行命令时手动指定需要的环境变量
变量数量较少时可以直接在sudo后声明变量:sudo YOUR_VAR1=xxx YOUR_VAR2=xxx nodemon app.js将环境变量配置到全局生效文件
把需要的变量写入/etc/environment全局环境配置文件,该文件的变量对所有用户、所有执行场景(包括sudo)都生效,配置完成后重新登录即可永久生效。配置sudo固定保留指定环境变量
用visudo命令编辑/etc/sudoers文件,添加如下配置指定要保留的变量,后续执行sudo命令时就会自动保留这些变量:Defaults env_keep += "YOUR_VAR1 YOUR_VAR2"该方式安全性更高,不会将所有用户环境变量都传递到root执行环境。
手动加载当前用户的.bashrc执行
如果你不想修改配置也不想移动变量,可以在sudo时主动加载对应用户的.bashrc文件,注意要写.bashrc的绝对路径:sudo bash -c 'source /home/你的用户名/.bashrc && nodemon app.js'
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

