2017-08-10 3 views
0

私は/ユーザ/ TCL /スクリプト/ gotorootというファイルにこのスクリプトを持っている:なぜこのdir(cd)がこのmacスクリプトで動作していないのですか?

echo "hello" 
cd/
echo "good bye" 

しかし、私はそれを実行したとき、私はこれを取得:

User:scripts tcl$ pwd 
/Users/tcl/scripts 
User:scripts tcl$ gotoroot 
hello 
good bye 
User:scripts tcl$ pwd 
/Users/tcl/scripts 
User:scripts tcl$ 

ディレクトリを変更し、Iドンれていませんどうして?これは、/ Users/tcl/scriptsではないはずです。

答えて

5

スクリプトを実行すると、新しいプロセスでサブシェルが開始されます。 cdは、そのサブシェル内のディレクトリを変更します。スクリプトでこれを置くことによって

テストそれを:

echo $(pwd) 
cd/
echo $(pwd) 

あなたはそれがスクリプト内/に変わることがわかります。

+1

ありがとうございました。これはhttps://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-scriptの複製です。 – John

+0

なぜ 'echo '$ PWD" 'を実行して余分なプロセスをスキップするのですか? –

+0

@EricRenouf正しいpedantryは "pwdだけでなく、エコーをスキップするのはなぜですか?"あなたも大丈夫です。 ;) –

1

シェルスクリプトは、サブプロセス内で実行されます。 CDは動作していますが、あなたのメインターミナルセッションとは異なるプロセスの中で起きています。ターミナルセッションに戻ると、作業ディレクトリには何の影響も与えません。

関連する問題