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

本文详细介绍了在使用sudo执行包含环境变量的脚本时遇到的问题及解决方案。通过修改/etc/sudoers文件中的Defaults env_reset设置为Defaults !env_reset,可以确保环境变量在sudo执行脚本时保持有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效,只有少数配置文件中指定的环境变量能保存下来。

sudo的配置文件是 /etc/sudoers 需要root权限才能读取:

 

在/etc/sudoers中修改:
Defaults    env_reset
为:
Defaults    !env_reset

这样,任何环境变量都可以通过sudo传进去了。

 

转自: http://bbs.chinaunix.net/thread-1920936-1-1.html

http://blog.sina.com.cn/s/blog_4da051a60102uyvg.html

### 麒麟系统中 `sudo apt` 命令不到解决方案 在麒麟系统中,如果执行 `sudo apt` 时提示“不到命令”,可能是由于以下几个原因之一导致: 1. **APT 工具未正确安装** 在某些情况下,APT 工具可能并未随系统一起预装。可以通过检查 `/usr/bin/apt` 文件是否存在来确认 APT 是否已安装。 ```bash ls /usr/bin/apt ``` 如果不存在该文件,则需要重新安装 APT 工具。 2. **PATH 环境变量问题** 如果 PATH 环境变量中缺少 `/usr/bin` 或者其他包含 APT 的路径,也会导致系统无法到 `apt` 命令。可以临时添加路径进行测试: ```bash export PATH=$PATH:/usr/bin ``` 3. **APT 替代工具的存在** 根据已有信息[^1],在银河麒麟系统中,`apt` 和 `apt-get` 并不完全等价。因此当 `apt` 不可用时,可尝试使用 `apt-get` 替代。 --- #### 解决方案步骤 1. **验证 APT 是否存在** 检查系统中是否有 APT 工具。 ```bash which apt ``` 如果返回为空,则表示 APT 未安装。 2. **重新安装 APT** 如果 APT 缺失,可通过以下命令重新安装: ```bash sudo apt-get update sudo apt-get install -y apt ``` 3. **切换到 `apt-get`** 当 `apt` 出现不可用的情况时,可以直接使用 `apt-get` 完成相同的功能。例如: ```bash sudo apt-get update sudo apt-get install package-name ``` 4. **修复 PATH 环境变量** 如果问题是由于 PATH 环境变量缺失引起的,可以在用户的 `.bashrc` 或 `.zshrc` 中永久添加路径: ```bash echo 'export PATH=$PATH:/usr/bin' >> ~/.bashrc source ~/.bashrc ``` 5. **检查镜像源配置** 错误的镜像源可能导致软件包无法正常下载或更新。建议更换为国内常用镜像源,例如阿里云或清华大学开源镜像站。编辑 `/etc/apt/sources.list` 文件并替换为合适的镜像地址后,运行以下命令刷新缓存: ```bash sudo apt-get update ``` 6. **安装 SSH 服务(如有必要)** 如果是在远程环境下操作,并且遇到类似 “telnet 22端口不通” 的问题,需确保 OpenSSH 服务已正确安装并启动[^3]: ```bash sudo apt-get install openssh-server sudo service ssh start ``` --- ### 总结 通过上述方法可以有效解决麒麟系统中 `sudo apt` 提示“不到命令”的问题。优先推荐使用 `apt-get` 替代 `apt`,因为两者并非完全一致[^1];同时注意保持正确的 PATH 设置以及合理的镜像源配置。 ```python # 示例代码:检测 APT 是否存在的简单脚本 import subprocess def check_apt(): try: result = subprocess.run(['which', 'apt'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 0: print("APT not found.") else: print("APT is installed at:", result.stdout.decode().strip()) except Exception as e: print(f"Error occurred: {e}") check_apt() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值