非交互式shell

系统执行shell脚本时用的就是这种shell。不同的地方在于他没有命令行提示符。但是当你在系统上运行脚本的时,也许希望能够运行一些特定的启动命令。

窍门

脚本能以不同的方式执行。只有其中的某一些方式能够启动子shell。

为了处理这种情况, bash shell提供了BASH_ENV环境变量。当shell启动一个非交互式shell进程时,他会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件里的命令这通常包括shell脚本变量的设置。
CentOS Linux发行版中,这个环境变量在默认情况下并未设置。如果变量未设置,printenv 命令只会返回命令行(CLI)提示符:

$printenv   BASH_ENV
$


所用Ubuntu发行版中,变量BASH_ENV也没有被设置。记住,如果变量未设置, echo命令会显示一个空行,然后返回**命令行(CLI)**提示符:

$ echo $BASH_ENV

$
  1. 那如果BASH_ENV变量没有设置,shell脚本到哪里去获得他们的环境变量呢?别忘了有些脚本是通过启动一个子shell来执行的 。子shell可以继承父shell导出过的变量
  2. 举例来说,如果父shell是登录shell,在/etc/profile、/etc/profile.d/*.sh和$HOME/.bashrc文件中设置并导出了变量,用于执行脚本的子shell就能够获得继承这些变量。
  3. 要记住,由于父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量。
  4. 对于那些不启动子shell的脚本,变量已经存在与当前shell中了所以就算没有设置BASH_ENV,也可以使用当前shell的局部变量和全局变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值