を使用できます。exec ./your-script
GNOMEターミナルのようなターミナルエミュレータは、その内部で実行されている初期プロセス(通常はシェル)が終了すると終了します。
既にターミナルにいて、そのターミナルを終了する前にしたいことが、特定のスクリプト(またはプログラム)を実行することだけである場合、これは、その中で実行されているシェルがもう必要ないことを意味します。したがって、シェルのexecビルトインを使用して、シェルをコマンドで作成されたプロセスで置き換えることができます。
- スクリプトの場合、それは別のシェルプロセスです。-なしでスクリプトを実行したときに2番目のシェルプロセスが作成されるのと同じです
exec。
構文は、たとえばです。exec commandexec ./your-script
exec: 例
たとえば、という名前のシェルスクリプトがありcount、実行可能とマークされ、現在のディレクトリにあるとします。を含む:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
そして、ターミナルで、私は実行します:
exec ./count
これは、数字を印刷し5、4、3、2、及び1、毎秒、その後、ターミナルウィンドウが閉じます。
ターミナルで最初に実行したプロセス以外からこれを実行する場合(たとえば、最初に実行してbash別のシェルインスタンスを起動した場合)、ターミナルを終了するのではなく、そのプロセスを作成したシェルに戻ります。(この警告は、exitベースの方法にも同様に適用されます。)
を使用できます。./your-script; exit
シェルに自分自身を新しいプロセスに置き換えるように指示したくない場合(を介してexec)、そのままにして、新しいプロセスが終了するとすぐに終了するように指示できます。
これを行うには、コマンドとexitコマンド;を1行で指定できるように区切って実行します。
構文はcommand; exit、たとえばです。./your-script; exit
command; exit 対 command && exit
あなたは次のようにこのルックスに気づくことで提案方法コスさんとheemaylの答えを。違いは次のとおりです。./your-script && exit
&&最初のコマンドがゼロの終了コードを返すことによって成功したことを報告した場合にのみ、2番目のコマンドを実行します。
; 最初のコマンドが成功を報告したかどうかに関係なく、2番目のコマンドを実行します。
どちらを使用するかは、特定の状況によって異なります。コマンドが失敗した場合、呼び出しシェル(およびホスト端末)を起動したままにしますか?もしそうなら、使用してください&&。そうでない場合は、を使用します;。
ありcommand || exit、呼び出し元のシェルにいる場合にのみ終了しており、command報告された不具合を。