你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何解决 sudo 命令找不到环境变量的问题

[复制链接]
gaosmile 发布时间:2020-7-23 15:21
如何解决 sudo 命令找不到环境变量的问题

在通过 sudo 运行命令时,系统会默认重置环境变量为安全的环境变量,也就是说,先前设置的变量都会失效,只有少数配置文件中指定的环境变量能够保存下来。

sudo 的配置文件是 /etc/sudoers,需要 root 权限才能读取,运行以下命令:

  • $ sudo sed '/^#/d;/^$/d' /etc/sudoers

sudo 的配置如下图所示:

微信图片_20200723152018.png

sudo 配置文件

请注意:

  • 第 3 行的 Defaults env_reset 表示默认会重置环境变量,因此自定义的变量会在 sudo 环境中失效,也就不会获取正确的变量值。

  • 第 4 行至第 8 行的 env_keep 配置项,用于保留部分环境变量不被重置,需要保留的变量就写入双引号之中。

  • 第 9 行的 secure_path 配置项,其中包含的路径将被当做 sudo 环境的PATH 变量使用,如果在 sudo 环境无法找到某些命令,那么可以将这些命令的路径加入该配置项之中。


综上所述,sudo 命令找不到环境变量或命令的问题,有三种解决方法:

  • sudo -E

加上 -E  选项后,用户可以在 sudo  执行时保留当前用户已存在的环境变量,不会被 sudo 重置。另外,如果用户对于指定的环境变量没有权限,则会报错。

  • 修改 sudo 配置文件

在内部测试机器中,安全性要求不高,总是需要加上 -E 参数来执行脚本,这个安全设定也不是很方便。因此,可以通过修改 /etc/sudoers 文件的env_keep 和 secure_path 配置项,来指定 sudo 环境中需要保留的环境变量和路径。

当然你也可以用更简单粗暴的方式:直接将 Defaults env_reset 改成Defaults !env_reset 来取消掉对 PATH 变量的重置,然后在 .bashrc 中最后添加 alias sudo='sudo env PATH=$PATH'。这样 sudo 执行命令时所搜寻的路径就是系统的 PATH 变量中的路径,如果你想添加其他变量方法也是类似。

  • 手动添加变量

手动在脚本中设置所需的变量,在执行 sudo 脚本前先将所需要的变量写入到需要执行的脚本开头。

参考文档
  • http://www.google.com

  • http://ghoulich.xninja.org/2017/05/09/how-to-find-env-variables-when-exec-sudo-commands/

  • http://www.ibm.com/developerworks/cn/aix/library/au-sudo/index.html



收藏 评论0 发布时间:2020-7-23 15:21

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版