プロンプトに時間表示

お仕事では作業ログは大変重要な証拠となる。各コマンドの実行した時間も分かるとより良い証拠となる。しかし、各コマンド実行前後にdateコマンドを打つのは面倒だ。
できれば、自動で。そう、プロンプトなんかに表示されると大変嬉しい。Linuxなんかだと高級なbashzshがあるのでプロンプトに\t%Tがあるので楽なのだが、残念ながらAIXデフォルトのシェルであるkshには現在時間に置換してくれる特殊文字が無い。

POSIXは辛いよ...と泣き言を言っても仕方ないので、苦肉の策。trapを用いる。

trapは主にシグナルを受け取った時の挙動を記述するコマンドだが、引数のsignalDEBUGを指定するとコマンド実行後の動作を指定できるのだ。
${HOME}/.kshrc

....
function setPrompt {
  TIME=$( date +"%Y/%m/%d %T" );
  PS1="${TIME} ${USER}@$( hostname ):${PWD} "
}
trap 'setPrompt' DEBUG

ってな感じのものを追加すればプロンプトに時間が表示される。
ただ、bashzshのそれとは異なり、あくまでコマンドが実行された後trapが発動するので空行の場合、時刻の変化が無い。若干癖のある挙動だが無いよりはマシだろう。