[目次] [前章] [次章]

3.ヒストリ機能

historyコマンド


historyコマンドは、シェルが立ちあがってからのコマンド履歴を表示します。
例えば、
     1  22:34   ls
     2  22:34   cd ..
     3  22:34   ls -al
     4  22:34   vi
     5  22:34   history
こんな感じに、履歴番号、時間、コマンドの3つセットで表示されます。

履歴の呼び出し


一番簡単な履歴の呼び出しは、カーソルキーを使うことです。
上を押すことで、1つ前のコマンドを呼び出し、
下を押すことで、1つ後ろのコマンドを呼び出すことが出来ます。
次に、historyコマンドで示された履歴番号を使う方法です。
それは、!(履歴番号)という呼び出しで行います。
これの変形で、!!は一つ前のコマンドを呼び出すことが出来ます。
!-2では2つ前、!-3では3つ前のコマンドを呼び出すことが出来ます。

以上のようにすれば、1度実行されたコマンドを数回のタイプで呼び出すことが出来ます。
では、以前に実行されたコマンドの、引数だけを使いたい場合はどうするかというと、
引数は、:(番号)で参照できます。
具体的には、履歴番号5の引数を表示させるには、
echo !5:0	(コマンド名)
echo !5:1	(1番目の引数)
echo !5:2	(2番目の引数)
…
という感じで表示することが出来ます。
特殊な形として、!$で最後の引数を参照することが出来ます。

さらに、!*というシンボルを使えば、
コマンド以外の全ての引数を参照することが出来ます。
例えば、
ls test.f test.c
というコマンドを実行したとすると、それらをviで編集するには、
vi !*
とすればよいことになります。

オプション


オプションは、ヒストリを参照するシンボルの後に付けます。
例えば、コマンドを実行しないで表示するだけのオプションは、:pで、
cat !4:2:pのように使います。
これは、4番目に実行されたコマンドの2番目の引数のファイルを
表示するコマンドを表示するものです。(ややこしい)

仮に、4番目に実行されたのが、
ls test.c test.f
だったとしたら、上のコマンドは、
cat test.f
を表示することになります。
コマンドを確認後、実行したい場合は、一つ前を参照する!!でOKですね。

あと便利なのが、:hオプションです。
これは、ディレクトリ名を取り出すオプションです。
例えば、直前に実行されたコマンドが、
cp /etc/rc.d/rc.local ~
だったとして、/etc/rc.dというディレクトリ名だけを取り出したい場合は、
!!:1:hで参照可能です。
これを使えば、cdで移動するのに便利ですね。

直前のコマンドの一部を置換して利用する


pcg-c1s:~/temp> ls
file001  file002

// このディレクトリには、file001とfile002というファイルが存在しています。

pcg-c1s:~/temp> ls -al file001
-rw-r--r--   1 taka     users           0 Sep 17 02:05 file001

// file001を調べてみました。

pcg-c1s:~/temp> ^1^2
ls -al file002
-rw-r--r--   1 taka     users           0 Sep 17 02:05 file002

// 1を2に変えて、file002を調べてみました。

pcg-c1s:~/temp> ls -al file00[12]
-rw-r--r--   1 taka     users           0 Sep 17 02:05 file001
-rw-r--r--   1 taka     users           0 Sep 17 02:05 file002
pcg-c1s:~/temp>

// 1と2をまとめて調べてみました。

要は、直前のコマンドに対して、
^(置換する文字列)^(置換後の文字列)
というのをかましてやれば、置換されたコマンドが実行されます。

よく、少ししか違わないのに、長いコマンドラインで、
一から打ち直すのが非常に面倒だというケースにあたる場合がありますが、
これなら一発でいけてしまいます。
便利なので、ぜひ覚えましょう。
[目次] [前章] [次章]