解决sudo用户找不到环境变量的问题

出于安全方面的考虑,使用sudo执行命令将在一个最小化的环境中执行,环境变量都重置成默认状态。所以PATH这个变量不包括用户自定义设置的内容
在sudo用户的主目录里的.bashrc中添加如下内容即可解决

$ vim ~/.bashrc

alias sudo="sudo env PATH=$PATH"

有这样一个shell脚本,其内容如下,没有给其x权限

vim test.sh

#!/bin/bash

echo "${PATH}"
# 执行该脚本,可以看到echo输出的结果
[[email protected] ~]$ bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
# 但是加上sudo,上述结果就不显示了,而是一个系统默认的${PATH}变量结果
[[email protected] ~]$ sudo bash test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 因其没有x权限,所以无法这样执行
[[email protected] ~]$ sudo ./test.sh
sudo: ./test.sh: command not found
# 给该脚本加上x权限
[[email protected] ~]$ chmod a+x test.sh
[[email protected] ~]$ ll
total 4
-rwxrwxr-x 1 test_ops test_ops 28 Sep 11 11:55 test.sh
# 可以执行,但结果相同
[[email protected] ~]$ sudo ./test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 在用户的主目录里的.bashrc中添加如下内容
[[email protected] ~]$ vim ~/.bashrc

alias sudo="sudo env PATH=$PATH"

# 退出登陆后再次执行,其结果正是自己想要的效果
[[email protected] ~]$ sudo ./test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin
[[email protected] ~]$ sudo bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin
[[email protected] ~]$ bash test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
[[email protected] ~]$ ./test.sh
/opt/ossutil:/opt/openresty/nginx/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8/bin:/opt/jdk1.8/jre/bin:/home/test_ops/.local/bin:/home/test_ops/bin
[[email protected] ~]$

参考连接:https://blog.csdn.net/jiangxuege/article/details/82592258

原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11505546.html

时间: 2024-10-22 23:21:59

解决sudo用户找不到环境变量的问题的相关文章

SSH登录远程主机执行脚本找不到环境变量

这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么在你的脚本中修改脚本解释器为如下形式,就能解决你的问题: #!/bin/bash --login 如果想了解详细的bash的四种模式以及各种模式的特点,请参考下面这篇文章,分析的非常详细: SSH连接远程主机执行脚本的环境变量问题

sudo执行脚本找不到环境变量解决方法

问题: 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本, 然后再sudo执行脚本,就找不到变量,未能获取到值. 原因 sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效,只有少数配置文件中指定的环境变量能保存下来. sudo的配置文件是 /etc/sudoers 需要root权限才能读取: 在/etc/sudoers中修改:Defaults    env_reset为:Defaults   

解决SSH远程执行命令找不到环境变量的问题

通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同,看起来很诡异的现象,根本原因在于这两种方式使用的bash模式不同! 1. 通过SSH登录后再执行命令和脚本这种方式会使用Bash的interactive + login shell模式,这里面有两个概念需要解释:interactive和login. login故名思义,即登陆,login shell

解决修改 Linux 下的 PHP 环境变量不生效的方法

这个问题出现服务器有多个 PHP 版本,php -v和phpinfo()显示两个不同的版本 最近真的,都给朋友解决问题了... phpinfo查看的 php 版本是 7.2.6,到 bash 去使用php -v查看的确是 5.4.2 直接上手先改环境变量,全局永久生效的那种~ vi /etc/profile 在最后加入对应的 PHP 路径 export PATH=$PATH:/usr/local/php/bin 保存,然后让配置生效 source /etc/profile 使用php -v查看还

elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题

参考:http://blog.51cto.com/4925054/2127840 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> 1.前往官网下载:https://projectlombok.org/download  lombok.jar 2.将lombok.jar放在eclipse的安装目

sudo如何保持当前用户的环境变量?

现象,我在/etc/profile里设置全局代理,然后使用命令 1.curl http://www.baidu.com  走代理 2.sudo curl http://www.baidu.com 并没有走代理 使用env和sudo env查看环境变量,发现代理设置只存在于env里,sudo env里并没有代理的信息 那么如何使用sudo的时候,把环境变量也带进去呢? 方法一. 在/etc/sudoers中添加以下内容作用相同: Defaults !env_reset 方法二. 可以把需要传递环境

SUDO的环境变量为何不同?

Refer: http://blog.sina.com.cn/s/blog_4da051a60102uyvg.html 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下: $ cat tesh.sh echo $var $ var=aaa $ export var # export 变量 $ sudo echo $var # sudo执行echo命令,返回变

sudo保持环境变量

编译Linux内核的最后是make modules_install install,这两个一般都需要root权限,即sudo,而一般我交叉编译内核时都是在.bashrc中export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 等等,而sudo默认会复位掉环境变量,导致设置的变量无效. sudo visudo 执行以上命令,在打在的文件中 Defaults env_reset行下面加一行 Defaults env_keep="ARCH CROSSED_

解决由于Mac环境变量配置问题所导致的node报错

在使用VS Code进行前端开始时,想使用VS Code自带的Debugger模块进行断点调试,但在启动Debugger时报错. 错误显示./usr/local/bin/node *****, 相比node的安装路径,多了一个前面的点.,因此考虑可能是由于系统配置环境变量重复所导致的. 在Mac系统中可配置环境变量的文件如下: 1. /etc/bashrc 与 /etc/profile 这两个文件用于存放作用于系统全局的环境变量,供所有用户使用. 我的重复环境变量 /usr/local/bin