私が知っているのは、2 つのスクリプト ファイルがある場合、 scriptで定義された変数または関数を使用して、a.sh
動作するが動作しないということです。シェルスクリプトを実行している間、両方とも正常に動作します。と を使用してスクリプトを実行することの違いは何ですか?b.sh
a.sh
. ./a.sh
./a.sh
./script.sh
. ./script.sh
./script.sh
. ./script.sh
2 に答える
4
表記. ./a.sh
は の略ですsource ./a.sh
。 source
指定されたファイルを行ごとに読み取り、シェルに直接入力されたかのように、そこに書き込まれたすべてを実行する、実行中のシェルの組み込みコマンドです。結果として、 にexit
ステートメントがある場合a.sh
、これをソースとするシェルが閉じられます。通常、xterm ウィンドウは閉じます。
ただし、表記./a.sh
は新しいプロセスを開始します。これは、現在のシェルfork
自体によって行われ、指定さexec
れたプログラムを使用してフォークされた子を作成します。この場合もシェル スクリプトなので、新しいシェルが作成されますexec
。この新しいシェルが行うことはすべて、元の (親) シェルには影響しません。子がバックグラウンドに送信されない場合、親は子が終了するのを待ちます。
于 2013-10-22T12:26:05.153 に答える