2013-03-24 32 views
0

我一直停留在这几个小时:不好用括号

cd /dir1 
(cd $HOME); pwd; 

为什么pwd还是说/dir1并没有去我家目录?

+8

因为[在子壳中评估括号](http://stackoverflow.com/a/2408512/902497)。 – 2013-03-24 16:01:16

+3

试试'(cd $ HOME; pwd); pwd',你会看到子shell在'/ home/user'中,当前shell仍在'/ dir1'中。 – 2013-03-24 16:10:42

回答

2

圆括号启动一个子shell:shell调用fork,圆括号内的命令在子进程中执行。父进程等待子进程退出然后恢复执行。所以发生了什么事情是:

  • 执行cd /dir1:壳执行chdir("/dir1")
  • 执行圆括号:shell调用fork,然后父进程等待子进程退出。
  • 执行cd $HOME:子外壳执行chdir("/home/jurgen")
  • 子shell已经用尽了命令,所以它退出。
  • 子外壳已退出,因此父代中的wait调用返回。
  • 执行pwd:shell打印当前目录,即/dir1