0

私はこれに何時間もこだわっています:

cd /dir1
(cd $HOME); pwd;

ホーム ディレクトリに移動せず、pwdまだ表示されるのはなぜですか?/dir1

4

1 に答える 1

2

括弧はサブシェルを開始します。シェルは を呼び出しfork、括弧内のコマンドはサブプロセスで実行されます。親プロセスは、サブプロセスが終了するのを待ってから、実行を再開します。だから何が起こっているのですか:

  • の実行cd /dir1: シェルが実行しchdir("/dir1")ます。
  • 括弧の実行: シェルは を呼び出しfork、親プロセスは子プロセスが終了するのを待ちます。
  • の実行cd $HOME: サブシェルが実行しchdir("/home/jurgen")ます。
  • サブシェルはコマンドが不足しているため、終了します。
  • サブシェルが終了したためwait、親の呼び出しが戻ります。
  • の実行pwd: シェルは現在のディレクトリを出力し/dir1ます。
于 2013-03-24T23:32:55.603 に答える