bashシェルでコマンドを実行するたびに何かしらのコマンドを自動実行したい場合は、
PROMPT_COMMANDにコマンドを設定しておけば、コマンドを実行するたびに、
PROMPT_COMMANDに設定されたコマンドが実行されます。
以下に実際にPROMPT_COMMANDにコマンドを指定して試した実行例を記します。
PROMPT_COMMANDにecho hello を設定してみます。
$ PROMPT_COMMAND="echo hello"
上記では、PROMPT_COMMANDに echo hello を設定してます。 実際に上記のコマンドを入力し、Enterキーを押すと、以下のように出力されるのが確認できます。
$ PROMPT_COMMAND="echo hello" hello
尚、Enterキーを押下するだけでも PROMPT_COMMAND に設定したコマンドが実行されます。
$ PROMPT_COMMAND="echo hello" hello $ hello $ hello $ hello
以下のようにすれば、関数を実行することも可能です。
変数iをインクリメントする関数です。
function cmd_count { if [ -z "$i" ]; then let i=0 fi let i++ echo "command count: $i" }
これを PROMPT_COMMAND に以下のように設定します。
PROMPT_COMMAND="cmd_count"
実際にターミナル(端末)を起動し実行したときの出力になります。
上記関数とは、ターミナルにコピー&ペーストしました。
> if [ -z "$i" ]; then > let i=0 > fi > let i++ > echo "command count: $i" > }
$ PROMPT_COMMAND="cmd_count" command count: 1
$ date 2019年 2月 24日 日曜日 22:28:11 JST command count: 2
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS" command count: 3最後にインクリメントされた値が表示されているのが確認できます。
ちなみに、PROMPT_COMMANDに設定した内容ををクリアする場合は、以下のようにすれば設定自体がクリアされます。
unset PROMPT_COMMAND
unsetコマンドでPROMPT_COMMANDの設定をクリア(unset)しています。
上記例では、ターミナルを起動し、PROMPT_COMMANDにコマンドを設定しました。
起動する端末全てで動作させる場合は、.bashrcに記述すれば良いでしょう。
また、export PROMPT_COMMAND しておけば、他のターミナルでも有効になりますね。
以上、コマンドを実行するたびに指定したコマンドを実行する方法でした。