このエントリーをはてなブックマークに追加


bashシェルでコマンドを実行するたびに他のコマンドを自動で実行する方法・PROMPT_COMMAND

bashシェルでコマンドを実行するたびに何かしらのコマンドを自動実行したい場合は、
PROMPT_COMMANDにコマンドを設定しておけば、コマンドを実行するたびに、
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

PROMPT_COMMAND に関数を指定する

以下のようにすれば、関数を実行することも可能です。

変数iをインクリメントする関数です。

function cmd_count {
  if [ -z "$i" ]; then
    let i=0
  fi
  let i++
  echo "command count: $i"
}

これを PROMPT_COMMAND に以下のように設定します。

PROMPT_COMMAND="cmd_count"

実際にターミナル(端末)を起動し実行したときの出力になります。
上記関数とは、ターミナルにコピー&ペーストしました。

  1. 上記関数をターミナルにペーストしました。 $ function cmd_count {
    >   if [ -z "$i" ]; then
    >     let i=0
    >   fi
    >   let i++
    >   echo "command count: $i"
    > }
  2. PROMPT_COMMAND に上記関数を設定します。
    早速、インクリメントされた値が表示されています。
    $ PROMPT_COMMAND="cmd_count"
    command count: 1
  3. dateコマンドを実行
    $ date
    2019年  2月 24日 日曜日 22:28:11 JST
    command count: 2
  4. 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を使用する

上記例では、ターミナルを起動し、PROMPT_COMMANDにコマンドを設定しました。
起動する端末全てで動作させる場合は、.bashrcに記述すれば良いでしょう。
また、export PROMPT_COMMAND しておけば、他のターミナルでも有効になりますね。

以上、コマンドを実行するたびに指定したコマンドを実行する方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-02-24 (日) 22:40:28