Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177288
  • 博文数量: 37
  • 博客积分: 1110
  • 博客等级: 少尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 22:01
文章分类

全部博文(37)

文章存档

2013年(10)

2011年(2)

2010年(25)

我的朋友

分类: LINUX

2010-09-27 22:36:53

  这段时间在看《Shell十三问》这篇文章,看到了一个问题,让我迷惑了一天,晚上终于搞懂了,就把它记下来,供大家参考参考。
 
     在文章中讲到:cd /a/b/c (/a/b/c为假设的路径名),通过命令行的形式,可以改变当前的路径。但当把这条命令写入一个脚本中,然后运行脚本,但不能改变当前的路径。why?
 
     《Shell十三问》的作者是这么解释的:运行脚本的的流程是:在当前Shell中产生一个子Shell的进程,然后在子Shell进程中产生命令行的子进程,完成所有命令行的解释,则返回父进程。因为环境变量传递是单向的(只能从父进程传递给子进程,其实就可以理解为“遗传”)。所以在子进程中改变的环境变量,在父进程中是无效的(是不能逆传递的,就像你father有些特征是不可能“遗传”到son的,那如果真的是,那关系就复杂了)。作者在书中开始讲到:我们在 shell 所下达的命令,均是 shell 所产生的子行程。当时我就想,我们在命令行中用cd命令不也是产生一个子进程吗?为什么它就能改变环境变量了?
 
    通过网上查了一些资料,终于明白了:作者说的那句话:我们在 shell 所下达的命令,均是 shell 所产生的子行程。太笼统了。在Shell中有些命令是不产生子进程的,那就是Shell的内建命令,cd这个命令就是内建命令,所以运行cd命令就是在当前的shell中,所以就能改变环境变量PWD。
 
    好了,说了这么多,不知道大家明白没有?
    顺便说一下,可以通过type这个命令查看shell命令的类型,就可以区分哪些命令是内建命令,哪些是外部命令。
阅读(1838) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-28 15:38:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com