linux环境变量

linux登陆环境变量初始化顺序

/etc/profile-->/.bash_profile-->/.bash_login-->~/.profile

参考:

   A  login  shell  is  one whose first character of argument
   zero is a -, or one started with the --login option.

   An interactive shell is  one  started  without  non-option
   arguments  and  without the -c option whose standard input
   and error are both connected to terminals  (as  determined
   by  isatty(3)), or one started with the -i option.  PS1 is
   set and $- includes i if bash is interactive,  allowing  a
   shell script or a startup file to test this state.

   The  following  paragraphs  describe how bash executes its
   startup files.  If any of the files exist  but  cannot  be
   read,  bash reports an error.  Tildes are expanded in file
   names as described below  under  Tilde  Expansion  in  the
   EXPANSION section.

   When  bash is invoked as an interactive login shell, or as
   a non-interactive shell with the --login option, it  first
   reads and executes commands from the file /etc/profile, if
   that file exists.  After reading that file, it  looks  for
   ~/.bash_profile,  ~/.bash_login,  and  ~/.profile, in that
   order, and reads and executes commands from the first  one
   that  exists  and is readable.  The --noprofile option may
   be used when the shell is started to inhibit  this  behav­
   ior.

   When a login shell exits, bash reads and executes commands
   from the file ~/.bash_logout, if it exists.

   When an interactive shell that is not  a  login  shell  is
   started,  bash reads and executes commands from ~/.bashrc,
   if that file exists.  This may be inhibited by  using  the
   --norc  option.   The --rcfile file option will force bash
   to  read  and  execute  commands  from  file  instead   of
   ~/.bashrc.

   When  bash  is  started  non-interactively, to run a shell
   script, for example, it looks for the variable BASH_ENV in
   the  environment,  expands  its value if it appears there,
   and uses the expanded value as the name of a file to  read
   and  execute.   Bash  behaves  as if the following command
   were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used  to  search
   for the file name.

Part two

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。
我们可以在脚本中通过命令export将变量输出到任何子shell;而通过source命令(.命令),可以执行shell脚本,并同时将脚本中的变量输出到当前shell。

Tips

  1. 有时,我们在crontab上定时调用在脚本,但是脚本执行一些命令没有成功。这时,我们可以将命令的调用方式都改成用绝对路径的方式;还有另一种方法,在脚本里加上如下信息,这样脚本调用命令也能正常执行了。

export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

  1. 当我们更改了环境变量,需要重新登陆shell才生效。其实也可以通过命令 source 更改的文件 来使其生效。

你可能感兴趣的:(linux环境变量)