出于安全方面的考虑,使用sudo执行命令将在一个最小化的环境中执行,环境变量都重置成默认状态。所以PATH这个变量不包括用户自定义设置的内容

在sudo用户的主目录里的.bashrc中添加如下内容即可解决

$ vim ~/.bashrc

alias sudo="sudo env PATH=$PATH"

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

vim test.sh

#!/bin/bash

echo "${PATH}"
# 执行该脚本,可以看到echo输出的结果
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ 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}变量结果
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ sudo bash test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 因其没有x权限,所以无法这样执行
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ sudo ./test.sh
sudo: ./test.sh: command not found
# 给该脚本加上x权限
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ chmod a+x test.sh
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ ll
total 4
-rwxrwxr-x 1 test_ops test_ops 28 Sep 11 11:55 test.sh
# 可以执行,但结果相同
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ sudo ./test.sh
/sbin:/bin:/usr/sbin:/usr/bin
# 在用户的主目录里的.bashrc中添加如下内容
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ vim ~/.bashrc alias sudo="sudo env PATH=$PATH" # 退出登陆后再次执行,其结果正是自己想要的效果
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ 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
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ 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
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ 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
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$ ./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
[test_ops@iZ2zej3o3e9be3aoukimfzZ ~]$

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

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

  1. sudo用户找不到环境变量 sudo找不到/usr/local/bin 下的执行文件,

    出于安全方面的考虑,使用sudo执行命令将在一个最小化的环境中执行,环境变量都重置成默认状态. 所以PATH这个变量不包括用户自定义设置的内容,如找不到/usr/local/bin/下面的命令在sud ...

  2. sudo执行脚本找不到环境变量

    sudo执行脚本找不到变量 问题 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能 ...

  3. sudo执行脚本找不到环境变量和命令

    简介 变量 普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下: ...

  4. 关于使用sudo找不到环境变量的问题

    参考这里:https://www.cnblogs.com/zhongshiqiang/p/10839666.html 使用sudo -E 保留当前用户环境,这时就不会存在找不到环境变量的问题了.

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

    这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么 ...

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

    问题: 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本, 然后再sudo执行脚本,就找不到变量,未能获取到值. 原因 sud ...

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

    通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同, ...

  8. Docker - 解决重新进入容器后,环境变量失效的问题

    问题背景 在容器中,在 /etc/profile . /etc/environment 设置了环境变量 退出容器,重新进入容器 刚刚设置的环境变量失效了 解决办法 将环境变量设置在 /root/.ba ...

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

    这个问题出现服务器有多个 PHP 版本,php -v和phpinfo()显示两个不同的版本 最近真的,都给朋友解决问题了... phpinfo查看的 php 版本是 7.2.6,到 bash 去使用p ...

随机推荐

  1. python模块turtle简单用法

    ##初始化turtle:t = turtle.Turtle() 或者 t = turtle.Pen()##查询turtle状态#位置t.position() #箭头朝向,箭头朝向按照顺时针或者逆时针偏 ...

  2. Java基础__Java中异常处理那些事

    一.Exception 类的层次 所有的异常类是从 java.lang.Exception 类继承的子类. Exception 类是 Throwable 类的子类.除了Exception类外,Thro ...

  3. Java内存模型之可见性问题

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 前言 之前的文章中讲到,JMM是内存模型规范在Java语 ...

  4. 选题 Scrum立会报告+燃尽图 07

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8678 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  5. SpringBoot上传文件临时失效问题

    线上的系统中不能上传文件了,出现如下错误: org.springframework.web.multipart.MultipartException: Could not parse multipar ...

  6. 4. 获取当前的文件夹的路径,以及当前文件名的路径 os.path.realpath

    使用os.path.realpath(__file__) 获得当前的文件夹的路径名, 使用os.path.split 进行路径切割 import os src, _= os.path.split(os ...

  7. [C#菜鸟]C# Hook (二) 常用钩子的类型

    ; //监视和记录输入事件.安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录 ; //回放用WH_JOURNALRECORD记录事件 ; //键盘钩子,键盘触发消息.WM_KEYUP或WM ...

  8. 【转】C++友元

    转自:https://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html 1.友元函数的简单介绍 1.1为什么要使用友元函数 在 ...

  9. Python统计学statistics实战

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  10. 创建策略(Creation Policy )和生命周期(Life Cycle)

    前言 在前面的介绍中我们已经知道:导入和导出的匹配成功需要ContractType,ContractName,Metadata都匹配,这里我们还要介绍一个新的东西:创建策略(creation poli ...