系统变量写在.bash_profile和.bashrc的区别

Posted 做一个有情怀的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统变量写在.bash_profile和.bashrc的区别相关的知识,希望对你有一定的参考价值。

今天配置一个代理,正儿八经的把我搞蒙了,不就是export http_porxy=xxx.xxx.xxx.xxx:xxxx

然后重启服务service network restart ,依然连接不了外网!

前提:我是通过ssh连接过去的

1>当我把环境变量写到.bashrc,重启服务,不生效

2>当我把环境变量写到.bash_profile的时候,重启服务,生效

3>当我把环境变量写到.bashrc,if判断之前的时候

如:

# .bashrc

export http_proxy=192.168.57.156:3128
export https_proxy=192.168.57.156:3128
export ftp_proxy=192.168.57.156:3128
# User specific aliases and functions

alias rm=rm -i
alias cp=cp -i
alias mv=mv -i

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

这个时候是 生效的。

对于一个我很有专研精神的我,肯定要弄明白呀,找了资料如下(重点地方我标记红色):

 

When working with Linux, Unix, and Mac OS X, I always forget which bash config file to edit when I want to set my PATH and other environmental variables for my shell. Should you edit .bash_profile or .bashrc in your home directory?

You can put configurations in either file, and you can create either if it doesn’t exist. But why two different files? What is the difference?

According to the bash man page, .bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

What is a login or non-login shell?

When you login (type username and password) via console, either sitting at the machine, or remotely via ssh: .bash_profile is executed to configure your shell before the initial command prompt.

But, if you’ve already logged into your machine and open a new terminal window (xterm) inside Gnome or KDE, then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

Why two different files?

Say, you’d like to print some lengthy diagnostic information about your machine each time you login (load average, memory usage, current users, etc).

You only want to see it on login, so you only want to place this in your .bash_profile.

上面说的大意就是说:打印每次登录机器的诊断的信息的时候需要.bash_profile

If you put it in your .bashrc, you’d see it every time you open a new terminal window.

但是如果你需要查看每次打开新的终端窗口的时候,需要.bashrc

Mac OS X — an exception

An exception to the terminal window guidelines is Mac OS X’s Terminal.app, which runs a login shell by default for each new terminal window, calling .bash_profile instead of .bashrc. Other GUI terminal emulators may do the same, but most tend not to.

Recommendation

Most of the time you don’t want to maintain two separate config files for login and non-login shells — when you set a PATH, you want it to apply to both. You can fix this by sourcing .bashrc from your .bash_profile file, then putting PATH and common settings in .bashrc.


To do this, add the following lines to .bash_profile:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

Now when you login to your machine from a console .bashrc will be called.

通过上面的分析我们知道,我是通过ssh连接的,是登陆用户,所以我的变量要生效,需要放在.bashrc里面

 

以上是关于系统变量写在.bash_profile和.bashrc的区别的主要内容,如果未能解决你的问题,请参考以下文章

/etc/profile和$HOME/.bash_profile

mac 配置.bash_profile不生效问题

.bash_profile和.bashrc的区别

OSX And​​roid Studio 的 gradle 无法读取 .bash_profile 环境变量 [重复]

Mac系统下配置JDK环境变量

Linux 环境变量问题