LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 703|回复: 1

()的疑惑

[复制链接]
发表于 2004-12-21 16:38:20 | 显示全部楼层 |阅读模式
  1. [leo@leo:leo]$ echo $SHLVL
  2. 3
  3. [leo@leo:leo]$ (echo $SHLVL)
  4. 3
  5. [leo@leo:leo]$ sh
  6. [leo@leo:leo]$ echo $SHLVL
  7. 4
  8. [leo@leo:leo]$ exit
  9. exit
复制代码
我看到好多教程都说()中的命令是用子shell执行的
如果要暂时改变目录,可以用(cd /path/you/want)
但看我上面的结果,好象()中的命令还是父shell执行的啊
发表于 2004-12-21 19:32:29 | 显示全部楼层
()的确是在子shell中执行的,上面的情况我推断()的实现方式是使用了folk了父进程的办法,所以子shell能得到父shell的值,但之后是无法得到父shell的值,要确定的证实我的推断应该去看源码,但为了简单地证实我的推断,我作了如下的测试,我想是可以证明此推断的

我对测试作了一些说明

[root@kiron test]# echo $x
3
[root@kiron test]# (echo $x;sleep 10;echo $x) &        //启动子shell,打印x值,睡眠10秒后,再打印x值,在10秒睡眠期间,我更改了父shell的x值,将这个命令行放在后台运行
[1] 16671
3
[root@kiron test]# x=4           //在父shell中更改了x值
[root@kiron test]# echo $x     //在父shell中打印出x值现在为4
4
[root@kiron test]# 3              //10秒后,现在这个值是由后台的命令打印的,仍然是3,所以的确是在子shell中执行()的

更值得一提的是,所谓在“子shell中执行”仍然是一个统一的称谓,在不同的“子shell中执行”在系统中的实现恐怕不尽相同
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表