Linux命令+shell脚本大全:定位系统环境变量(2)

6.6.2 交互式 shell 进程

如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入 bash 时启动),那
么你启动的shell叫作交互式shell。交互式shell不会像登录shell一样运行,但它依然提供了命令行
提示符来输入命令。
如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录
中的.bashrc文件。
在本书所用的CentOS Linux系统上,这个文件看起来如下:

$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
$

 .bashrc文件有两个作用:一是查看/etc目录下通用的bashrc文件,二是为用户提供一个定制自
己的命令别名(参见第5章)和私有脚本函数(将在第17章中讲到)的地方。

6.6.3 非交互式 shell
最后一种shell是非交互式shell。系统执行shell脚本时用的就是这种shell。不同的地方在于它
没有命令行提示符。但是当你在系统上运行脚本时,也许希望能够运行一些特定启动的命令。
窍门 脚本能以不同的方式执行。只有其中的某一些方式能够启动子shell。你会在第11章中学习
到shell不同的执行方式。
为了处理这种情况,bash shell提供了 BASH_ENV 环境变量。当shell启动一个非交互式shell进
程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件
里的命令,这通常包括shell脚本变量设置。
在本书所用的CentOS Linux发行版中,这个环境变量在默认情况下并未设置。如果变量未设
置, printenv 命令只会返回CLI提示符:
$ printenv BASH_ENV
$
在本书所用的Ubuntu发行版中,变量 BASH_ENV 也没有被设置。记住,如果变量未设置, echo
命令会显示一个空行,然后返回CLI提示符:
$ echo $BASH_ENV
$
那如果 BASH_ENV 变量没有设置,shell脚本到哪里去获得它们的环境变量呢?别忘了有些
shell脚本是通过启动一个子shell来执行的(参见第5章)。子shell可以继承父shell导出过的变量。
举例来说,如果父shell是登录shell,在/etc/profile、/etc/profile.d/ * .sh和$HOME/.bashrc文件中
设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。
要记住,由父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量。
对于那些不启动子shell的脚本,变量已经存在于当前shell中了。所以就算没有设置
BASH_ENV ,也可以使用当前shell的局部变量和全局变量。

6.6.4 环境变量持久化
现在你已经了解了各种shell进程以及对应的环境文件,找出永久性环境变量就容易多了。也
可以利用这些文件创建自己的永久性全局变量或局部变量。
对全局环境变量来说(Linux系统中所有用户都需要使用的变量),可能更倾向于将新的或修
改过的变量设置放在/etc/profile文件中,但这可不是什么好主意。如果你升级了所用的发行版,
这个文件也会跟着更新,那你所有定制过的变量设置可就都没有了。
最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变
量设置放在这个文件中。
在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一
点适用于所有类型的shell进程。但如果设置了 BASH_ENV 变量,那么记住,除非它指向的是
$HOME/.bashrc,否则你应该将非交互式shell的用户变量放在别的地方。
说明 图形化界面组成部分(如GUI客户端)的环境变量可能需要在另外一些配置文件中设置,
这和设置bash shell环境变量的地方不一样。
想想第5章中讲过的 alias 命令设置就是不能持久的。你可以把自己的 alias 设置放在
$HOME/.bashrc启动文件中,使其效果永久化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee达森

创作不易,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值