#コマンド履歴の利用
##履歴の操作
shellの内部コマンド history, fc とイベント指示子を使う。
想像だけど・・
shell上に打ち込んだコマンドはhistory コマンド・プログラムにより
入出力ライブラリ・バッファにバッファリングされているようです。
親プロセスのshellがexit()するとディスク・ファイルにフラッシュされる様子。
履歴ファイルは /home/ 以下にある ".bash_history"に記録されているものとします。
###履歴リストのクリア
history -c
履歴ファイルは変更されない。
$ history -c
$ vi $HOME/.bash_history # <- 履歴ファイルは残ったまま。$ fc -l コマンドでも確認出来る。
$ history -cw # 履歴リストをクリアし、履歴ファイルに空の履歴リストを書き込む
$ history 5 <- 直前の5件表示(ファイル履歴の最終行からマイナス5行分)
95 cd
96 vi file.c
97 gcc file.c
98 ./a.out
99 clear
$ !96 # 96番のコマンドを実行
$ history -d 99 # 99番のコマンドを削除
$ history -s "/`gcc` $1/gcc new.c/" # gcc コマンドに渡されていたファイル名を'new.c'に置き換え履歴リストに追加
現在までの履歴リストを履歴ファイルに書き込み
$ history -a
履歴リストを履歴ファイルの内容で更新
$ history -n
###履歴操作のまとめ
-c :履歴リストのクリア
-d :[行番号] 行番号で指定したコマンドを履歴ファイルから削除
-w :履歴ファイルへの上書き
-r :履歴ファイルから履歴リストへの読み込み
-a :履歴ファイルにまだ書き込まれていない履歴リストを履歴ファイルに書き込み。
-n :履歴ファイルから履歴リストに未取得分を読み込み
-p :コマンド置き換え。ただし、実行はしない。実際に置き換える前に確認できる。
-s :追加したいコマンド :履歴リストに"追加したいコマンド"を追加。履歴ファイルには追加しない。
###shellの内部コマンド fc をつかう
■ fc [-e エディタ名] [-lnr] [開始位置] [終了位置]
-l 標準出力にコマンド履歴を表示
-n コマンド番号非表示
-r 逆順に表示
開始位置、終了位置には文字列、または履歴の番号を指定。
終了位置はファイルの現在位置からのオフセット。ファイル現在位置はファイル末尾から。-n 行で n行前へ。
履歴ファイルが辞書順にソートされている場合
fc -l a z
とするるとコマンド名aから始まり、コマンド名zで始まるコマンドの範囲を指定出来る。
バケツソートの有用性がよくわかりますね。
■ fc -s [パターン=置き換えたい値] [コマンド]
"パターン" を "置き換えたい値" に 置き換えて "コマンド" を実行
##履歴リストの参照
###イベント指示子を使う
!n :n個目のコマンド
!! :直前のコマンド
!-offset :マイナスの数値を指定で現在位置からoffset前のコマンド。
その他
環境変数を利用した設定などは他の方が書いたドキュメントで。ここには書きません。
参考サイト
JM Project
http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html