常见坑
1 子父进程 管道
管道的最基本作用就是衔接输入输出;
bash是解释执行!他在命令中看到管道符的时候会将管道符前边的开启一个子进程,管道符之后的也开启一个子进程,然后利用pipe进行串联;
[binc@localhost ~]$ a=1
[binc@localhost ~]$ echo $a # 输出变量
1
[binc@localhost ~]$ { a=2;echo "nihhao"; } | cat # | 管道符
nihhao
[binc@localhost ~]$ echo $a #进程隔离,父进程拿不到子进程的变量 想要用的话两个方法 1:export变成环境变量 2 写入文件然后父进程读文件
1
[binc@localhost ~]$ { echo $a;a=2;echo $a; } | cat #子进程能够拿到父进程的变量
1
2
[binc@localhost ~]$
[binc@localhost ~]$ echo $$
3760
[binc@localhost ~]$ echo $$ |cat # $$ $BASHPID都是当前进程pid,区别是$$的优先级高于管道符;$$被优先解释成3760之后才解释了管道符的含义
3760
[binc@localhost ~]$ echo $BASHPID | cat #bash是解释执行!他在命令中看到管道符的时候会将管道符前边的开启一个子进程,管道符之后的也开启一个子进程,然后利用pipe进行串联两个子进程的标准输入和标准输出; 所以输出的当前进程号与命令窗口的不一样;
3849
[binc@localhost ~]$