コマンドを実行したことがあり、綴りの間違いのためにエラーが発生したことがありますか?または、最後に実行した3つのコマンドを忘れましたか?以前のコマンドを書き直すか覚える代わりに、Bashの`fc`コマンドを使用して、迅速な編集と以前のコマンドの再実行を支援できます。
この記事では、`fc`を使用してコマンド履歴からコマンドを編集および再実行する方法について説明します。
前提条件
この記事はチュートリアルです。ステップバイステップで一緒に進む予定の場合、LinuxコンピューターまたはWindows 10コンピューター(WSL(Windows Subsystem for Linux)が有効になっている必要があります)。このチュートリアルでは、Ubuntu 20.04 LTSを使用します。
Bash `fc`コマンドについて
`fc`はLinuxアプリケーションではなく、Bashの組み込みシェルユーティリティです。Bashはほとんどの主要なLinuxディストリビューションで利用可能です。Bash `fc`コマンドを使用すると、数回のキーストロークで以前のコマンドをリスト、編集、または実行できます。
「fc」コマンドは、Zシェル(ZSH)でも利用できます。ただし、この記事の例では、Bashで
fc
を使用します。
間違った長いコマンドを実行したことがありますか?fc
を使用すると、コマンド全体を再入力する手間を省くことができます。代わりに、fc
を使用して、お好みのテキストエディタでコマンドを編集できます。編集を保存した後、編集されたコマンドは自動的に実行されます!
fc
を試してみる準備はできていますか?さあ、始めましょう!
以前のコマンドをリストアップ
コンピューターから離れて戻ってきて、最後に実行したコマンドを忘れてしまったことはありますか?または、正しい順序で複数のコマンドを実行したか覚えていないかもしれません。どうしますか?安心してください、fc
が思い出すのを手助けします。以下にその方法を示します。
1. コンピューターでBashターミナルを開きます。
2. fc
を有効にするには、何らかのコマンド履歴が必要です。たった今新しいターミナルウィンドウを開いたばかりなので、コマンド履歴がまだありません。テスト用にコマンド履歴を構築するには、以下の各コマンドをコピーしてターミナルで実行します。これらのコマンドは、侵入的ではなく、コンピューターを危険にさらすことはありません。
3. 次に、以下のコマンドを実行して履歴内のすべてのコマンドをリストします。 -l
オプションは、fc
に対してコマンドを実行せずに過去のすべてのコマンドをリストするよう指示します。
以下のように表示されるように、fc
コマンドは以前に入力した4つのコマンドすべてを表示します。 左側の数字は各コマンドの実行順序を示しています。

最後のコマンドの編集と再実行
アプリケーションのインストール中にスペルミスをした場合、コマンドが失敗することがあります。コマンド全体を再入力する代わりに、コマンドを編集して自動的に再実行することはできませんか? 以下の手順に従って行います。
1. ターミナルで以下のコマンドを実行して、存在しないアプリケーションをインストールしようとしてみてください。アプリケーション名 caffiene
を意図的にスペルミスしていることに注意してください。
その結果、インストールの試行が失敗します。以下のようなメッセージが表示されます。

2. 直前に実行したコマンドを修正するには、ターミナルで以下のコマンドを実行してください。これにより、デフォルトのテキストエディタでコマンド履歴バッファが開きます。この例では、デフォルトのテキストエディタは nano です。
以下のスクリーンショットは、nano エディタ内の最後のコマンドを示しています。

nano がお好みのテキストエディタでない場合、
fc
を別のエディタに指示することができます。たとえば、vi のようなエディタを使用できます。そのためには、-e
オプションに続けてテキストエディタの名前を含めます。例えば、fc -e vi
を実行すると、vi テキストエディタでコマンド履歴が開きます。
3. nano テキストエディタに入ったら、caffiene
というアプリケーション名の綴りを caffeine
に修正します。
4. アプリケーション名を修正した後は、CTRL+X
を押して nano を終了します。
5. 次に、変更されたバッファを保存しますか? というプロンプトが表示されたら、Y
を押してから Enter
を押して変更を保存します。

テキストエディタを終了した直後に、fc
は自動的に編集したコマンドを実行します。

前のコマンドを編集して再実行する
fc
を使用すると、実行した最後のコマンドだけでなく、以前に実行したコマンドのいずれも編集できます。たとえば、echo 'working on the command line with fc'
というコマンドを編集する場合は、次の手順に従います。
1. 下記のコマンドを実行して端末で前のコマンドをリストします。
2. コマンド履歴リストから編集したいコマンドを見つけ、その左側の番号をメモします。この例では、コマンド番号は 2 です。

3. 端末で以下のコマンドを実行して、番号が 2 のエントリのコマンドを編集します。コマンドはテキストエディタで開き、編集できるようになります。
4. テキストエディターに入ったら、必要に応じてコマンドを編集します。
5. コマンドを編集したら、CTRL+X
を押して nano を終了します。
6. 次に表示されるプロンプトで、変更されたバッファを保存しますか?、Y
を押してから Enter
を押して変更を保存します。

コマンドを保存してテキストエディターを終了した後、編集したコマンドが自動的にシェルで実行されます。
複数のコマンドを編集して再実行する
fc
が一度に 1 つの前のコマンドのみを編集して実行できると思っていたら、驚くかもしれません。なぜなら、fc
では複数の前のコマンドを編集することもできるからです!複数の前のコマンドを編集することの利点は何でしょうか?1 つに、コマンドの実行順序を変更できます。
前のコマンドの 2 から 7 番を編集したいとします。その場合は、以下の手順に従ってください。
1. Bash ターミナルで以下のコマンドを実行し、Enter キーを押します。以下のコマンドは fc <space> 2 <space> 7
と読み取り、fc
がコマンド 2 から 7 を編集するようにします。
2. 次に、必要に応じてコマンドを編集します。この例では次のようになります。
sudo apt install caffiene -y
コマンドを削除します。uname -a
とps aux
の順序を入れ替えます。clear
を削除します。

3. コマンドを編集したら、CTRL+X
を押して nano を終了します。
4. 次に表示されるプロンプトで、変更されたバッファを保存しますか?、Y
を押してから Enter
を押して変更を保存します。
コマンドを編集した場合、テキストエディターを終了した後に自動的に実行されます。

前のコマンドを編集せずに再実行する
最初に前のコマンドを編集せずに実行するだけの場合は、fc
にそのオプションがあります。履歴の中から指定したエントリーの前のコマンドを実行する手順に従ってください。
- 以下のコマンドを実行して、ターミナルで前のコマンドをリストアップします。
2. コマンド履歴リストから、再度実行したいコマンドを見つけ、左側の番号をメモします。この例では、コマンド番号は2です。

3. 特定の前のコマンドを実行するには、シェルで以下のコマンドを実行します。 -s
オプションは、fc
に編集をスキップしてコマンド番号2を実行するように指示します。
スクリーンショットは、コマンド履歴からコマンド番号2を実行したfc
を示しています。

結論
この記事は、fc
という便利だがしばしば見落とされ、忘れられがちなコマンドに興味を持たせることを目的としています。前に実行したコマンドを再入力する手間を省くためにfc
を使用する方法を学びました。
fc
に関する今回の知識を考えると、使いたいと思いますか?それとも引き続きシェルでコマンドを再入力する方が良いと思いますか?賢明な選択をしてください!