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

问题: 当普通用户下,设置并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

时间: 2024-10-10 01:16:23

sudo执行脚本找不到环境变量解决方法的相关文章

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

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

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

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

安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法

大多数原因是没有配置环境变量 解决方法 1. cd /etc/profile 2. 把这三条加到proflie文件的最后 export JAVA_HOME=XXXX(在安装了jdk的前提下,echo $JAVA_HOME可以查看得到) export HADOOP_HOME=XXX(hadoop的安装路径) export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH 3.完成后保存文件, 更新环境变量 4. source /etc/profile 最后,

shell 脚本实战笔记(2)--环境变量PATH的恩怨情仇

在linux环境下, 相信大家对环境变量PATH, 多多少少有所接触, 这边讲讲PATH的在linux的前世因缘. 先讲讲一个列子 假如我们在为一个新的应用配置其PATH路径中时,  不小心忽略了原先的$PATH内容, 把原本的PATH=/path/to/newcmd:$PATH, 写成了PATH=/path/to/newcmd, 并不小心写入了~/.bashrc, 并且source ~/.bashrc. 这时会发生什么? 我们如何去处理这种情况? 所有的命令都不能用了, 想回去编辑~/.bas

设置环境变量的方法

执行脚本 使用.和source执行脚本,会加载脚本中的变量,并在脚本结束后脚本中的变量(包括函数)值在当前shell中依然存在,而sh和bash则不行 设置环境变量的方法(三种) 退出当前用户就会丢失 第一种: export XJHADD=caoxiroad 第二种: declare -x XJHADD=caoxiroad 第三种: XJHADD=caoxiroad;export NAME 定义全局环境变量 永久生效 在/etc/profile 文件最后一行添加 export XJHADD=ca

环境变量刷新方法

近日公司内的安装程序脚本中有一段是要设置环境变量的 脚本执行成功,无错误,环境变量写入成功 但是..不..生..效..! 必须在我的电脑-属性-高级-环境变量中找到对应的设置后,点击“编辑”,然后点击“确定”,才会生效,如下: 1 DWORD dwResult; 2 //方法1 不一定有效 3 ::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, (LPARAM)"Environment", SMTO_NORMAL,

[转]在Linux里设置环境变量的方法

在Linux里设置环境变量的方法(export PATH) 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量: 1.直接用export命令:#export PATH=$PATH:/opt/au1200_rm/build_tools/bin查看是否已经设好,可用命令export查看

hadoop搭建杂记:Linux下JDK环境变量的设置(三种配置环境变量的方法)

Linux下JDK环境变量的设置(三种配置环境变量的方法) Linux下JDK环境变量的设置(三种配置环境变量的方法) ①修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题. vi /etc/profile 在profile文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_H

Linux下 环境变量设置方法

etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量. ~/.profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.