bash shell
选项:
-c string 从string中读取命令并进行处理
-i 启动一个能够接收用户输入的交互shell
-l 以登录shell的形式启动
-r 启动一个受限shell,用户会被限制在默认目录中
-s 从标准输入中读取命令
进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为{ command; }。使用花括号进行命令分组并不会像进程列表那样创建出子shell。
要想知道是否生成了子shell,得借助一个使用了环境变量的命令。这个命令就是echo $BASH_SUBSHELL。如果该命令返回0,就表明没有子shell。如果返回 1或者其他更大的数字,就表明存在子shell。
[root@lottcomm3 ~]# (pwd;ls -l;cd;pwd)
/root
总计 92
-rw------- 1 root root 4622 2020-12-21 anaconda-ks.cfg
drwxr-xr-x 3 root root 4096 2020-12-22 Desktop
-rw-r--r-- 1 root root 53161 2020-12-21 install.log
-rw-r--r-- 1 root root 7808 2020-12-21 install.log.syslog
/root
[root@lottcomm3 ~]# echo $BASH_SUBSHELL
0
使用jobs命令来显示后台作业信息。
[root@lottcomm3 ~]# sleep 100 &
[1] 32635
[root@lottcomm3 ~]# jobs
[1]+ Running sleep 100 &
在CLI中运用子shell的创造性方法之一就是将进程列表置入后台模式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。
$ (tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&
协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。
要进行协程处理,得使用coproc命令,还有要在子shell中执行的命令。
coproc sleep 10
coproc My_Job { sleep 10; }