🔖

terminal(bash)終了時にコマンドを実行する方法 trapコマンド

に公開

皆さんterminalは使っていますか。

使っている人も使っていない人もいると思いますが今回はterminal終了時にコマンドを実行したいという内容で記事を書いていきます。

具体的な用途としては、bashを動かしつつその中でfishやzshを一時的に使用している。
zshからbashに戻るときbashに戻す際にコマンドをまとめて実行したいという時や、
nixを使っていてdevshellを実行している。作業が終わりdevshellから、普通のOSのbashに戻る際にコマンドを実行するといったときに使用できます。

早速始めていきます。
使用するのは、trapコマンドです。
trapコマンドはシグナルや強制終了要求を受けたときの動作を設定することができます。
shellに対して設定することでshellが終了時に処理を動作させることができます。
shell関数を作成して
trap 関数 EXITと実行します。

trap_test.sh
#! /usr/bin/env bash

export env="python313"
export OLD_SHELL_PS1=$PS1
export PS1="($env)$PS1"

exit_hook(){
   export PS1=$OLD_SHELL_PS1
}

trap exit_hook EXIT

bashのターミナルの中でbashを作成し、shellファイルを実行すると
プロンプト表示が少し変わる。
作業完了後exitでbashを抜けると表示は元に戻ります。

$ bash
$ source ./trap_test.sh
(python313)$ ls
trap_test.sh
(python313)$ exit
$

$PS1を付けても影響はないですけども、Dockerを終了したりいろいろな処理を挟み込めます

Discussion