2.1.2 子shell基础
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
场景
之前我们对于环境变量在多个shell环境中的应用进行了学习,那种操作量比较大。对于一些临时性的场景,我们在临时性的环境中,做一些操作,但是不希望对外部的环境造成影响,这个时候我们就涉及到了一些临时shell环境的实践。关于临时shell环境的创建,我们可以借助于()方法来实现。
临时shell
临时shell环境 - 启动子shell(命令列表),在子shell中执行命令列表,退出子shell后,不影响后续环境操作。
临时shell环境 - 不启动子shell{命令列表}, 在当前shell中运行命令列表,会影响当前shell环境的后续操作。
简单实践
() 实践
查看当前shell的pid
[root@localhost ~]# echo $BASHPID
11413
[root@localhost ~]# ps aux | grep bash
root 11413 0.0 0.0 116724 3160 pts/0 Ss 12:54 0:00 -bash
root 11660 0.0 0.0 112824 984 pts/0 R+ 14:49 0:00 grep --color=auto bash查看子shell的pid
[root@localhost ~]# (echo $BASHPID; echo haha)
11661
haha
[root@localhost ~]# (echo $BASHPID; sleep 30)
11711另开一个终端查看效果
[root@localhost ~]# pstree | grep sleep|-sshd-+-sshd---bash---bash---sleep
结果显示:在一个shell内部开启了另一个shell
子shell的操作不影响当前shell环境
[root@localhost ~]# (export SUBSHELL=subshell)
[root@localhost ~]# echo $SUBSHELL[root@localhost ~]#子shell中,查看命令执行效果
[root@localhost ~]# (cd /tmp;pwd)
/tmp
[root@localhost ~]# pwd
/root
{} 实践
查看当前shell的进程id号
[root@localhost ~]# echo $BASHPID
11676在{}环境中查看当前shell的进程id号
[root@localhost ~]# { echo $BASHPID; }
11676
{} 环境中,操作命令会影响当前的shell环境
[root@localhost ~]# { export SUBSHELL=subshell; }
[root@localhost ~]# echo $SUBSHELL
subshell子shell中,查看命令执行效果
[root@localhost ~]# { cd /tmp;pwd; }
/tmp
[root@localhost /tmp]# pwd
/tmp
小结