#author("2019-02-24T22:40:28+09:00","","")
#navi(../)
* bashシェルでコマンドを実行するたびに他のコマンドを自動で実行する方法・PROMPT_COMMAND [#aec207a8]
bashシェルでコマンドを実行するたびに何かしらのコマンドを自動実行したい場合は、~
PROMPT_COMMANDにコマンドを設定しておけば、コマンドを実行するたびに、~
PROMPT_COMMANDに設定されたコマンドが実行されます。
以下に実際にPROMPT_COMMANDにコマンドを指定して試した実行例を記します。
#htmlinsert(linux_ads_top.html)
#contents
* 参考記事 [#kbeb2704]
-[[bashにて複数端末間でコマンド履歴(history)を共有する方法>http://iandeth.dyndns.org/mt/ian/archives/000651.html]]
* PROMPT_COMMANDにコマンドを設定する [#h80f030f]
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
* PROMPT_COMMAND に関数を指定する [#de3175b0]
以下のようにすれば、関数を実行することも可能です。
変数iをインクリメントする関数です。
function cmd_count {
if [ -z "$i" ]; then
let i=0
fi
let i++
echo "command count: $i"
}
これを PROMPT_COMMAND に以下のように設定します。
PROMPT_COMMAND="cmd_count"
実際にターミナル(端末)を起動し実行したときの出力になります。~
上記関数とは、ターミナルにコピー&ペーストしました。
+ 上記関数をターミナルにペーストしました。
$ function cmd_count {
> if [ -z "$i" ]; then
> let i=0
> fi
> let i++
> echo "command count: $i"
> }
+ PROMPT_COMMAND に上記関数を設定します。~
早速、インクリメントされた値が表示されています。
$ PROMPT_COMMAND="cmd_count"
command count: 1
+ dateコマンドを実行
$ date
2019年 2月 24日 日曜日 22:28:11 JST
command count: 2
+ catコマンドを実行
$ 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)しています。
* すべてのターミナルで有効にしたい場合は、exportを使用する [#lbc307c7]
上記例では、ターミナルを起動し、PROMPT_COMMANDにコマンドを設定しました。~
起動する端末全てで動作させる場合は、.bashrcに記述すれば良いでしょう。~
また、export PROMPT_COMMAND しておけば、他のターミナルでも有効になりますね。
以上、コマンドを実行するたびに指定したコマンドを実行する方法でした。
#htmlinsert(linux_ads_btm.html)