括号使用不当

时间:2013-03-24 15:59:10

标签: unix parentheses pwd

我被困在这几个小时了:

cd /dir1
(cd $HOME); pwd;

为什么pwd仍然说/dir1并且没有访问我的主目录?

1 个答案:

答案 0 :(得分:2)

括号开始子shell:shell调用fork,括号内的命令在子进程中执行。父进程等待子进程退出然后继续执行。所以发生的事情是:

  • 执行cd /dir1:shell执行chdir("/dir1")
  • 括号的执行:shell调用fork,然后父进程等待子进程退出。
  • 执行cd $HOME:子shell执行chdir("/home/jurgen")
  • 子shell已用完命令,因此退出。
  • 子shell已退出,因此父级中的wait调用将返回。
  • 执行pwd:shell打印其当前目录,即/dir1