ファイル名: test.sh
#!/bin/bash
ZDir="$(echo /usr/src)"
cd "$ZDir"
スクリプトを実行すると、./Test.sh
コマンドはcd
何もしません。 bash端末で直接これを実行しようとすると、魅力のように動作します。また、スクリプトの内部と外部の両方で使用されるエコーは正しい値(/usr/src
)を返します。
なぜこれが起こるのか知っている人がいますか?繰り返しますが、cd $ZDir
これはスクリプトの外部の端末で直接使用すると機能します。
編集:「重複した」回答が見つかりませんでしたが、G-Manユーザーが何をすべきかについて正確に回答しました。 && を含め、実行する必要がある次のコマンドを入力すると機能します。これには関数を使用することもできます... cdZDir() { cd /usr/src;make;install }
その後、関数を直接呼び出すだけです。
答え1
cd
影響を与える現在のシェルとその子孫。シェルスクリプトは新しいシェルプロセスで実行されるため、cd
スクリプトの a はスクリプトの実行の残りの部分と実行されるすべてのプログラムにのみ影響します。
pwd
のような命令を入力するとls
スクリプトを入力して、その後、成功したcd
ことがわかります。cd
スクリプトから。- と言うと、
. ./Test.sh
現在の(注)シェルプロセスはTest.sh
その中にあるコマンドを読み込み実行します。これにより、現在の(注)シェルプロセスが新しいディレクトリに配置されることがわかります。