Shell及 子Shell关系

在Linux中,登陆后默认处于一个Login Shell,执行脚本时会根据首行指定的shell创建子Shell。Source命令在当前Shell环境执行,不新建子Shell;sh或bash则在子Shell中执行,新建变量不保留;通过chmod+x和./执行则在新子Shell执行,影响独立。通过echo $SHLVL可观察Shell层级变化。

        Linux登陆主机后,在执行Script之前,其实我们已经处于一个shell中,即Login Shell ,它是将来要执行Script的父shell,如root账号默认为/bin/bash

       Linux下每个账号都可以自定义Login Shell,在/etc/passwd文件中,Login  Shell定义在第七个字段,如果这个字段不存在,不合法或执行失败,则无法登陆主机

       当在执行一个Shell  Script时,父Shell会根据Script程序的第一行的    #:    之后指定的shell程雪 来开启一个子shell坏境,然后再子shell中执行此Shell Script,一旦执行完毕,子Shell结束,回到父Shell,不会影响原文父Shell的环境。


执行脚本的三种方式:

1.Source    test.sh       或者  .      test.sh

在当前Shell环境下读取并执行Script中命令,该Script可以没有权限,没有建立子shell,script里所有新建坏境变量都保存在当前Shell里


2.sh  test.sh   或者Bash   test.sh

在父Shell下建立一个子shell,在子shell中执行脚本里面的语句,该子Shell继承父Shell的环境变量,但子shell新建的坏境变量不会带回父shell,除非使用export,可以无执行权限


3.    chmod  +x  test.sh  &&  ./test.sh

打开一个子Shell来执行test.sh脚本



1.登陆主机后,打开一个终端,输入echo  $SHLVL,输出2.

2.输入bash,进入一个子Shell,然后再输入echo   $SHLVL,输出3.

3.输入EXIT,然后再输入echo  $SHLVL ,输出2.

4.输入EXIT,退出终端。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值