1

私が知っているのは、2 つのスクリプト ファイルがある場合、 scriptで定義された変数または関数を使用して、a.sh動作するが動作しないということです。シェルスクリプトを実行している間、両方とも正常に動作します。と を使用してスクリプトを実行することの違いは何ですか?b.sha.sh. ./a.sh./a.sh./script.sh. ./script.sh./script.sh. ./script.sh

4

2 に答える 2

4

表記. ./a.shは の略ですsource ./a.shsource指定されたファイルを行ごとに読み取り、シェルに直接入力されたかのように、そこに書き込まれたすべてを実行する、実行中のシェルの組み込みコマンドです。結果として、 にexitステートメントがある場合a.sh、これをソースとするシェルが閉じられます。通常、xterm ウィンドウは閉じます。

ただし、表記./a.shは新しいプロセスを開始します。これは、現在のシェルfork自体によって行われ、指定さexecれたプログラムを使用してフォークされた子を作成します。この場合もシェル スクリプトなので、新しいシェルが作成されますexec。この新しいシェルが行うことはすべて、元の (親) シェルには影響しません。子がバックグラウンドに送信されない場合、親は子が終了するのを待ちます。

于 2013-10-22T12:26:05.153 に答える