2013-03-24 54 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