地味だけど便利な bash の履歴機能

Posted on

毎日数時間は Linux に向き合っているわけですが、そのほとんどが端末での操作になります。ミスなく素早くコマンドを打つことは、効率的に作業する上でとても重要です。

最近知った bash の履歴機能を紹介します。地味だけど覚えると便利です。

直前のコマンドを再現する

これは有名ですが !! で直前のコマンドを再現します。 Ctrl + P と同じです。

$ vim .bashrc
$ !!
vim .bashrc

n 番目のコマンドを再現する

!n で history の n 番目のコマンドを再現します。 history | grep foo みたいに絞り込んで使うことが多いです。

$ !1007
vim .bashrc

直前のコマンドの foo を bar にして再現する

直前のコマンドの foo を bar にして再現します。たとえば、ローテーションされたログファイルを次々に開いていく場合などに便利です。

$ less foo.txt
$ !:s/foo/bar/
less bar.txt

上記の 3 つはイベント指示子 (Event Designator) と呼ばれています。 bash の man ページには「イベント指示子は、履歴リスト中のコマンドラインエントリを参照するものです」とあります。

直前のコマンドの引数を再現する

個人的に一番使っているのがこの機能です。直前のコマンドの引数を引き継いで使えます。

$ ls -l /var/log/cron
$ less !$
less /var/log/cron

!^ が最初、!$ が最後、!:n が n 番目、!* がすべての引数となっています。これらは単語指示子と呼ばれています。