(2)再说管道与shell脚本执行关系

本文通过实验分析了bash中管道操作的原理,指出管道两侧的命令在子shell中执行,而变量的修改不会传递回父shell环境,强调了父子进程间的变量隔离现象。
摘要由CSDN通过智能技术生成

实验1:变量$path的输出是空值。

root@37C:~# pwd | read path
root@37C:~# echo $path

root@37C:~# 

实验2:

#代码:
$ ls -l1 |  while read line
do 
let count=$count+1
echo "line-${count}: $line"
done

--有输出结果:
line-1: 总用量 292
line-2: -rwxr-xr-x 1 root root   8648 918 15:26 a.out
line-3: drwxr-xr-x 4 root root   4096 829 22:49 bashell
line-4: drwxr-xr-x 4 root root   4096 108  2012 ClusterManagement
line-5: -rw-rw-rw- 1 py   py   230168 89 19:14 ClusterManagement.zip
line-6: -rwxrwxrwx 1 root root    742 728 16:48 ftp_upload.py
line-7: -rwxr-xr-x 1 root root    281 84 09:36 gopherclient.py
line-8: -rw-r--r-- 1 root root     56 9月  18 13:31 output
line-9: drwxr-xr-x 2 root root   4096 95 18:40 __pycache__
line-10: -rw-r--r-- 1 root root     76 9月  18 15:26 run.c
line-11: -rwxr-xr-x 1 root root    159 95 18:38 run.py
line-12: -rwxr-xr-x 1 root root    313 919 15:26 run.sh
line-13: drwxr-xr-x 2 root root   4096 912 13:09 shellyard
line-14: -rwxr-xr-x 1 root root    911 825 15:46 tem_run.py
line-15: drwxr-xr-x 3 root root   4096 85 12:23 test
line-16: -rwxr-xr-x 1 root root    420 85 09:37 travelDirectory.py

#在login-shell下,变量还是空值。
root@37C:~# 
root@37C:~# echo $count

root@37C:~# echo $line

root@37C:~# 

分析:
–实验1:
bash 在执行pwd|read line时,管道两边的都是在子shell进程中执行,执行echo $var 是父shell进程中执行,由于子进程所创建,修改的变量不会保存返回到父进程,因此父shell是无法读到子shell变量(事实上,就没有path这个变量存在);

–实验2:
bash 执行ls -l1 | while read line,管道符线可看做是父进程fork的两个子进程之间的通信,但$line与$count 变量一样不能传递回父环境中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值