Bashのhistoryコマンドは、他のLinuxシェルのhistoryインターフェイスを凌駕する機能を備えています。
Bashには豊かな歴史があります。つまり、さらに古い前身シェルを持つ古いシェルですが、他のどのシェルのヒストリインターフェイスよりも多くの機能を提供する優れたヒストリコマンドも持っています。 版のhistoryでは、逆引き検索、クイックコール、履歴の書き換えなどが可能です。
historyコマンドは他の多くのコマンドとは異なります。コマンドを実行可能ファイルとして /usr/bin、/usr/local/bin、~/bin などの一般的なシステムレベルの場所に置くことに慣れているかもしれません。 組み込みの履歴コマンドは PATH になく、物理的な場所もありません:
$ which history
which: no history in [PATH]
代わりに、history シェル自体の組み込み機能です:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]
Display or manipulate the history list.
そのため、各シェルの機能の歴史は独特であり、Bashで使っているものがTcshやFishやDashで使えないかもしれませんし、それらのシェルで使えるものがBashで使えないかもしれません。場合によっては、Bashでできることを知ることで、他のシェルのユーザーがBashの挙動を再現するための興味深い改造を行うきっかけになるかもしれませんし、あなたが知らなかったBashの機能が解放されるかもしれません。
バッシュ履歴を見る
history 最も基本的で頻繁な使い方は、シェル・セッションの履歴を見ることです:
$ echo "hello"
$ echo "world"
$ history
1 echo "hello"
2 echo "world"
3 history
イベントインジケーター
イベントで履歴を検索します。ここでいう「イベント」とは、履歴に記録されたコマンドのことで、改行で区切られています。つまり、1行に1つのイベントがインデックス番号で表示されます。
ほとんどのイベントインジケータは感嘆符で始まり、「バン」と呼ばれることもあります。
ヒストリからコマンドを再実行するには、感嘆符の後にコマンドのインデックス番号を続けます。例えば、1行目にecho "hello "というコマンドがあり、それをもう一度実行したいとします:
echo "hello"
相対位置指定を使って、履歴の現在位置から後ろの行番号を指定することができます。例えば、履歴の一番後ろのエントリに戻る場合です:
$ echo "foo"
$ echo "bar"
$ echo "baz"
echo "foo"
1行だけ戻りたい場合は、省略記法の! の代わりに!-1.の代わりに!
$ echo "foo"
echo "foo"
文字列検索
エントリーの特定の文字列を検索して、実行するコマンドを検索することもできます。指定した文字列のコマンドを検索するには、感嘆符の直後に検索する文字列を続けます:
$ echo "foo"
$ false
$ !echo
echo "foo"
また、任意の場所にその文字列を含むコマンドを検索することもできます。これを行うには、! を検索する文字列と一緒に使いますが、文字列の両端をクエスチョンマークで囲みます。文字列の直後に改行文字があることがわかっている場合は、最後のクエスチョンマークを省略できます:
$ echo "foo"
$ false
$ !?foo?
echo "foo"
文字列の置き換え
行頭の文字列を検索するのと同様に、文字列を検索して新しい文字列に置き換えることで、コマンドを変更することができます:
$ echo "hello"
$ echo "world"
$ ^hello^foo
echo "foo"
歴史を役立てる





