Chinaunix首页 | 论坛 | 博客
  • 博客访问: 915241
  • 博文数量: 75
  • 博客积分: 1216
  • 博客等级: 少尉
  • 技术积分: 1998
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-11 16:20
个人简介

优秀是一种习惯

文章分类

全部博文(75)

文章存档

2014年(1)

2013年(29)

2012年(45)

分类: Python/Ruby

2012-10-19 18:33:41

   很多人都很困惑这个子shell到底是怎么定义的,但是有时候会发现和子shell不是自己想想的那样。
   子shell莫非就是shell打开一个新shell去执行程序,但是有时候会感到很困惑。比如:

  1. [root@station1 ~]# a=123
  2. [root@station1 ~]# (echo $a)
  3. 123
  4. [root@station1 ~]# echo "echo \$a" > 1.sh
  5. [root@station1 ~]# cat 1.sh
  6. echo $a
  7. [root@station1 ~]# bash 1.sh
  8. [root@station1 ~]#
man一下bash就可以查到,()中的命令会打开一个子shell去执行。在执行脚本的时候也会打开一个子shell去执行脚本程序,可是为什么结果不一样呢?
看下下面这个代码:

  1. [root@station1 ~]# echo $BASH_SUBSHELL
  2. 0
  3. [root@station1 ~]# (echo $BASH_SUBSHELL)
  4. 1
  5.  [root@station1 ~]# echo $$
  6.  4386
  7.  [root@station1 ~]# echo $BASHPID
  8.  4386
  9.  [root@station1 ~]# (echo $$)
  10.  4386
  11.  [root@station1 ~]# (echo $BASHPID)
  12.  7206
  13.  [root@station1 ~]# (echo $BASHPID)
  14.  7209
  15.  [root@station1 ~]# (echo $BASHPID)
  16.  7210
  17.  [root@station1 ~]#
BASH_SUBSHELL这个变量指的是当前shell的层数
BASHPID这个变量时bash 4.0后新添加的一个变量,指的是当前bash的PID。
$$     这个变量定义当前程序所在shell的PID

通过BASH_SUBSEHLL可以看出()这个操作确实在子shell中运行。
之所以在()中执行能看到变量$a的值,是因为:大家都知道,在linux中fork一个新的进程会赋值父进程的资源,()这种操作符打开的shell并没有重新初始化,而在一个脚本中执行就会重新初始化一个新shell。

还需要指出的就是:bash自带的shell变量,有些是自动变化的,有些是只读的,有些是不会自动变化只有重新初始化shell才会更新比如$$,$?等。看了下面这个例子,相信一定就明白了:

  1. [root@station1 ~]# adsfasdf
  2. bash: adsfasdf: command not found
  3. [root@station1 ~]# (echo $?)
  4. 127
  5. [root@station1 ~]#

阅读(2400) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

pybmsk2012-11-03 16:37:07

PTC Creo 2.0 M010 Full Multilanguage WinALL-ISO 2DVD

PTC Creo/Illustrate (ex PTC IsoDraw) 2.0 WinALL-ISO 1DVD

PTC Creo Schematics (ex Routed Systems Designer) 2.0 M010-ISO 1CD

PTC Pro/E WildFire+Pro/Mechancia v6.0 Alpha Win32-ISO 3CD

PTC Creo Elements/Pro 5.0 M070 Working for Win32-ISO 1DVD(最新多语言正式版包括简、繁体中文)

PTC Creo Elements/Pro 5.0 M070 Working for Win64-ISO 1DVD

PTC Creo Elements View (ex Product View) v