[问题]sudo和环境变量

sh/bash/dash/ksh/zsh等Shell脚本
回复
caike
帖子: 30
注册时间: 2005-12-09 16:22

[问题]sudo和环境变量

#1

帖子 caike » 2008-09-10 15:27

本人是做java的, java里面的东西很麻烦, 动不动就要设置环境变量, 所以想请教大家一下关于环境变量的设置问题:

我是linux菜鸟, 问题比较stupid, 大家见笑了:)

1.这两种方式是不是等效的?
JAVA_HOME=/usr/lib/jvm/java-6-sun
export $JAVA_HOME=/usr/lib/jvm/java-6-sun


知道有两个地方可以设置环境变量(如果不对请大家指正:))
1. etc/environemnt //

2. ~.bashrc //


2. 关于环境变量的scope问题:
如果我想把设置的环境变量给所有用户使用(就是windows下面的系统变量), 应该在哪设呢?

3. sudo的问题
我把环境变量设在~.bashrc里, 执行一段shell script, 例如说run.sh
我直接 ./run.sh, 没报错, 一切正常
我 sudo ./run.sh, 会说JAVA_HOME变量没设置, 请问这个环境变量和sudo有关系吗?
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#2

帖子 cnkilior » 2008-09-10 15:37

1.这两种方式是不是等效的?
JAVA_HOME=/usr/lib/jvm/java-6-sun
export $JAVA_HOME=/usr/lib/jvm/java-6-sun

不等效。具体可以man export

知道有两个地方可以设置环境变量(如果不对请大家指正Smile)
1. etc/environemnt //(貌似不设置bash环境变量)

2. ~.bashrc //

还有:
3、/etc/bashrc(如果有)
4、~/.bash_profile(比~/.bashrc先处理,但一般是由他先调用.bashrc然后执行下面的语句)
5、/etc/profile



2. 关于环境变量的scope问题:
如果我想把设置的环境变量给所有用户使用(就是windows下面的系统变量), 应该在哪设呢?

/etc/bashrc
/etc/profile

3. sudo的问题
我把环境变量设在~.bashrc里, 执行一段shell script, 例如说run.sh
我直接 ./run.sh, 没报错, 一切正常
我 sudo ./run.sh, 会说JAVA_HOME变量没设置, 请问这个环境变量和sudo有关系吗?

不知道,貌似使用当前用户环境变量。
头像
zcg0696
帖子: 44
注册时间: 2008-05-27 17:30

#3

帖子 zcg0696 » 2008-09-10 23:15

你在脚本里export $JAVA_HOME,这样变更用户也能得到你想要的环境变量
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

#4

帖子 HuntXu » 2008-09-11 11:15

代码: 全选

sudo echo  "export $JAVA_HOME=/usr/lib/jvm/java-6-sun" >> /etc/profile.d/java.sh
sudo chmod a+x /etc/profile.d/java.sh
变开机自动加入的变量,省事...
HUNT Unfortunately No Talent...
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

#5

帖子 aerofox » 2008-09-11 14:08

应该是

代码: 全选

export JAVA_HOME
不要加那个 $
lqik2004
帖子: 52
注册时间: 2007-12-15 2:04

Re: [问题]sudo和环境变量

#6

帖子 lqik2004 » 2009-11-19 10:39

3. sudo的问题
我把环境变量设在~.bashrc里, 执行一段shell script, 例如说run.sh
我直接 ./run.sh, 没报错, 一切正常
我 sudo ./run.sh, 会说JAVA_HOME变量没设置, 请问这个环境变量和sudo有关系吗?
这个问题可以用
sudo -H解决
查看一下man sudo

代码: 全选

       -H          The -H (HOME) option sets the HOME environment variable to
                   the homedir of the target user (root by default) as
                   specified in passwd(5).  By default, sudo does not modify
                   HOME (see set_home and always_set_home in sudoers(5)).
加上这个之后可以把HOME环境变量加到默认的root上
回复