端末を終了してコマンドを実行します。

端末を終了してコマンドを実行します。

現在の端末を終了してコマンドを実行したいです。できますか?

PS::ループを作成したとします。while true; do bash;done

ベストアンサー1

適切なトラップを使用してサブシェルで実行できます。たとえば、echo -e '\nCommand done最後に実行するにはwhile true; do true; done、次のコマンドを使用できます。

mario@mario-K53SV:~$ (trap 'echo -e "\nCommand done"' EXIT; while true; do true; done)

トラップは、サブシェルの EXIT イベントで定義したコマンドを登録します。サブシェルを作成するには括弧が必要です。これを一般化してコマンドを変数(たとえば)に入れるには、そのコマンドを正しく実行するMY_COMMAND='while true; do true; done'必要があります。evalこの出力例は、使用される用途を正確に示しています(evalがなければ機能しません)。

mario@mario-K53SV:~$ YOUR_COMMAND="while true; do true; done"
mario@mario-K53SV:~$ EXECUTE_ON_EXIT="echo -e '\nCommand done'"
mario@mario-K53SV:~$ (trap 'eval ${EXECUTE_ON_EXIT}' EXIT; eval ${YOUR_COMMAND})
^C
Command done

mario@mario-K53SV:~$

自動的に電源を切るためにも使用できます。端末同様に、EXITハンドラコマンドの末尾にはkill -s SIGHUP $$ハンドラの末尾にのみ含めることができます(例EXECUTE_ON_EXIT="echo -e '\nCommand done'; kill -s SIGHUP $$":)。

おすすめ記事