見出し画像

historyコマンドの履歴から再実行する方法

コマンドライン上で矢印キー(↑↓)を使って、過去に実行したコマンドを一つずつ表示させて再実行する方法を良く使っています。

ただ、それだと直近のコマンドを再実行する場合は問題ないですが、いくらか前に実行して矢印キーで戻ることが難しい場合は、historyコマンドが有効だと思います。使えるhistoryの実行パターンを厳選してご紹介したいと思います。

historyとgrepでコマンド履歴を効率的に表示

ただ、historyで表示される履歴の数が多くなってきた場合は、追うのが大変です。
そこで、historyとgrepをパイプ"|"でつないで組み合わせることで、実行履歴を見つけやすくすると良いと思います。

例えば、catコマンドを実行した履歴を中心に表示させたい場合は、下記のように実行します。

$ history | grep "cat"

実行すると下記のように、”cat”の文字列を含む履歴を表示させることができます。


$ history | grep "cat"
  11  cat in.txt 
  15  history | grep "cat"

historyの履歴から選択して再実行する方法

!履歴番号 の形式で、再実行することができます。

例えば、下記のhistory実行結果があったとします。

$ history | grep "cat"
  11  cat in.txt 
  15  history | grep "cat"


履歴番号11を実行したい場合には、下記のように実行します。

$ !11


下記が実行結果で、履歴番号11が実行されているのが確認できます。


$ !11
cat in.txt 
20 45 awk
67 32 delimiter
78 56 row


historyの履歴を削除する方法

-cオプションで履歴を削除することができます。


$ history -c

コマンド履歴を後方検索

Bashを使っている時に以前実行したコマンドをもう一度または少し変えて実行したい場合があります。
そんな時はCtrl-rで検索モードにしてからコマンドを入力することで以前実行したコマンドを簡単に後方検索することができます。Ctrl-rを実行する度に以前のコマンドが表示されるので、何度かCtrl-rを実行すると目的のコマンドが出てくると思います。 


$ (Ctrl-r)
(reverse-i-search)`git': git commit


もしCtrl-rを実行しすぎて目的のコマンドを通り過ぎた場合は、Ctrl-sで履歴を戻ることもできます。
ただし、通常はCtrl-sにスクリーンロックがかかっていて戻れないことが多いです(スクリーンロックしてしまったらCtrl-qで解除してください)。そんな時はCtrl-sに割り当てられているスクリーンロックを解除することで戻れるようにできます。
スクリーンロックを解除して前方検索出来るように設定

ショートカットキーの割当状況を確認します。もしstop=^Sになっていれば以下の操作によって解除してください。


$ stty -a


スクリーンロックを未定義にする。


$ stty stop undef
stop=<undef>になっているか確認する。
$ stty -a

この記事が気に入ったらサポートをしてみませんか?