はじめに
Bash でコマンドを実行しているときにコマンドをうち間違えたことは何度もありますよね。
間違えただけではなく、過去に実行したコマンドのスペルを忘れてしまったり、引数やオプションを忘れてしまったりも一度ならず何度もあるはずです。
Bash にはヒストリ機能があるため上矢印キーや下矢印キーで過去に実行されたコマンドの履歴をたどることができますが、 fc コマンドを利用することで過去に実行したコマンドの再利用が更にはかどります。
今回は fc コマンドの使い方について紹介します。
検証環境
| |
“fc” コマンドの概要
fc コマンドは、Bash の組み込みコマンドの 1 つです。
“fix command” の 2 つの単語の頭文字をとって fc コマンドと名付けられているようです。
具体的には、次のような機能を持っています。
- 過去に実行したコマンドを一覧表示
- 直前に実行したコマンドをエディタで編集し実行
- 過去に実行した任意のコマンドをエディタで編集し実行
- 過去に実行した複数のコマンドをひとまとめに実行
- 直前に実行したコマンドを編集せずに実行
fc コマンドは Bash だけでなく、Zsh でも使用できます。
Mac OS ユーザーでも学習しておいて損はありません。
過去に実行したコマンドを一覧表示
ターミナル上の作業から一時的に離れたのち戻ってきたら何をしていたか忘れていました、なんてことがあります。 複数のコマンドを順番に 1 つ 1 つ実行していたが、どこまで実行したか忘れてしまったといったこともあります。
そんなときは落ち着いて。
fc コマンドを実行すれば何をしていたか思い出すことができます。
| |
これまでどんな操作をしていたかわからなくなってしまいました。
(スクリーンを上にスクロールします、 screen や tmux を使っていればもちろんこのようなことにはなりませんが)
ここで fc -l と fc コマンドを -l オプション付きで実行します。
| |
コメント行を含めて、今まで実行したコマンドが表示されます。
デフォルトでは履歴が 16 コマンド分しか表示されません。
-l の後ろに数値を指定すると、指定した数値に一致する履歴番号以降の履歴が全て表示されます。
55 を指定したからといって履歴が 55 コマンド分表示されるわけではないという点に注意が必要です 。
| |
-l オプションと一緒に引数を2つ指定した場合は1つ目の引数から2つ目の引数の間の履歴番号を持つ履歴が表示されます。
| |
-l オプションの引数に数値以外が指定された場合は、コマンドの実行履歴を最近のものから前方一致で検索し見つかった履歴以降をすべて表示します。
| |
ちなみに fc コマンドに保存されるコマンドの実行履歴の数は HISTSIZE 環境変数の設定値に依存します。
もし HISTSIZE 環境変数が設定されていない場合は 128 コマンドまでが保存されます。
同様に保存されるコマンドの実行履歴が保存されるファイルは HISTFILE 環境変数の設定値に依存します。
設定されていない場合には ~/.bash_history ファイルに保存されます。
直前に実行したコマンドをエディタで編集し実行
アプリケーションをインストールする状況を想像してください。
| |
追加で php-mbstring をインストールしたいとします。
次のコマンドをタイプします。
| |
実行した結果、エラーとなります。 install のつづりが誤っていたためです。 コマンド入力は面倒な上にタイプミスの原因となります。
そんなときは fc を引数無しで実行します。
| |
デフォルトでは Vim エディタが起動し、最後に実行された apt install php-mysql -y が表示されています。
mysql の部分を msbstring に書き換え :wq コマンドで保存、終了します。
すると apt instal php-mbstring -y が実行されます。
軽微な内容なら「上矢印キー」を押して直前のコマンド履歴を起動した後に書き換えてもよいのですが、コマンドが複雑な場合は使い慣れたエディタの方が編集しやすいです。
ちなみに使われるエディタは次の順番で選定されます。
FCEDIT環境変数に設定されているコマンドEDITOR環境変数に設定されているコマンドviコマンド
他コマンドでもよく使われる EDITOR 環境変数に好きなエディタコマンドを設定しておくのがよいでしょう。
過去に実行した任意のコマンドをエディタで編集し実行
fc コマンドをオプション無しで実行すると直前実行されたコマンドを編集対象とします。
更に前の履歴を編集対象としたい場合には引数に履歴番号をしてしいます。
| |
この結果、 Vim には apt install php-mysql -y が表示されます。
あとは実行したい希望のコマンドに編集した後、 :wq でエディタを終了します。
過去に実行した複数のコマンドをひとまとめに実行
更に変わった使い方について紹介します。
fc コマンドの対象は 1 つのコマンドだけではなく、過去に実行した複数のコマンドを選択できます。
まずは履歴を表示します。
| |
ここで過去に実行した apt の 3 つの履歴を再利用したいとします。
その場合、対象としたい履歴の開始番号と終了番号を指定します。
ここでは履歴 1 、 3 、 4 を選択したいので、番号の最小値 1 と最大値 4 を引数として渡します。
| |
エディタには次の内容が表示されるはずです。
| |
不要な 2 行目の env は削除して :wq でエディタを保存、終了すれば、3 つのコマンドが実行できます。
もちろん適切な内容に追加編集しても構いません。
直前に実行したコマンドを編集せずに実行
過去に実行したコマンドをそのまま実行できます。
| |
もう一度ヘルプを引きたいということで、 11 番の fc --help を実行してみます。
| |
しかし、これについては Bash や Zsh のコマンド履歴をあいまい検索できるツールが提供されているのでそちらを利用するのが良いでしょう。 僕の他ツールを利用しています。
ひとこと
じゃあ fc コマンドを使うかというと、現在表示中のコマンドをエディタで開くためのショートカットキーも提供されているので僕はそちらを利用することが多いですね。
!! コマンドを使うことも多いですしね。
リモートサーバー上での操作時に生きてきそうです。