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をまとめて調べてみました。
要は、直前のコマンドに対して、
^(置換する文字列)^(置換後の文字列)
というのをかましてやれば、置換されたコマンドが実行されます。
よく、少ししか違わないのに、長いコマンドラインで、
一から打ち直すのが非常に面倒だというケースにあたる場合がありますが、
これなら一発でいけてしまいます。
便利なので、ぜひ覚えましょう。