Introduction
|
|
通常対話シェルとして使用している bash (1) の
コマンドライン履歴機能の便利な使い方。
bash (1)のコマンドライン履歴機能のうち
イベント指示子、単語指示子、修飾指示子はオンラインマニュアルにも情報が少ないが、
慣れると非常に便利でキータイプ量も減るので是非マスターしておきたい。
|
機能一覧
|
|
それぞれの指定子の機能一覧を以下に示す。
イベント指示子
|
!!
|
直前に実行したコマンドを実行する
|
!-n
|
n回前に実行したコマンドを実行する
|
^foo^bar
|
直前に実行したコマンドの foo を bar に変更して実行する
|
!:s/foo/bar
|
!:gs/foo/bar
|
直前に実行したコマンドの全ての foo を bar に変更して実行する
|
!foo
|
foo で開始されるコマンドを実行する
|
!nn
|
nn 番目に実行されたコマンドを実行する
|
単語指示子
|
!:n
|
直前に実行したコマンドの n 番目の引数を取得する
|
!^
|
直前に実行したコマンドの1番目の引数を取得する
|
!$
|
直前に実行したコマンドの最後の引数を取得する
|
!*
|
直前に実行したコマンドの全ての引数を取得する
|
!:n*
|
直前に実行したコマンドの n 番目から最後までの引数を取得する
|
!:n-m
|
直前に実行したコマンドの n 番目から m 番目までの引数を取得する
|
!:-n
|
直前に実行したコマンドの最初から n 番目までの引数を取得する
|
!:n-
|
直前に実行したコマンドの n 番目から最後の1個前までの引数を取得する
|
修飾指示子
|
:p
|
コマンドを表示のみして実行しない
|
:h
|
パスのファイル名部分を取り除きディレクトリ名を取得する
|
:t
|
パスのディレクトリ名部分を取り除きファイル名を取得する
|
:r
|
ファイル名の拡張子を取り除き . の前を取得する
|
:e
|
ファイル名の拡張子を . 付きで取得する
|
|
イベント指示子
|
|
- !!
直前に実行したコマンドを実行する
$ echo foo bar baz
foo bar baz
$ !!
echo foo bar baz
foo bar baz
|
- !-n
n回前に実行したコマンドを実行する
複数のコマンドを繰り返して実行する場合に便利
$ echo foo bar baz
foo bar baz
$ echo hoge huga haga
hoge huga haga
$ !-2
echo foo bar baz
foo bar baz
$ !-2
echo hoge huga haga
hoge huga haga
|
-
^foo^bar
!:s/foo/bar
!:gs/foo/bar
直前に実行したコマンドの foo を bar に変更して実行する
g を付けると全ての foo を bar に変更
/ は任意の文字に変更が可能
$ echo foo foo foo
foo foo foo
$ ^foo^bar
echo bar foo foo
bar foo foo
$ echo foo foo foo
foo foo foo
$ !:s/foo/bar
echo bar foo foo
bar foo foo
foo foo foo
$ !:gs/foo/bar
echo bar bar bar
bar bar bar
|
-
!foo
foo で開始されるコマンドを実行する
$ echo foo bar baz
foo bar baz
$ touch hoge huga haga
$ !ec
echo foo bar baz
foo bar baz
|
-
!nn
nn 番目に実行されたコマンドを実行する
$ echo foo bar baz
foo bar baz
$ touch hoge huga haga
$ !1
echo foo bar baz
foo bar baz
|
|
単語指示子
|
|
- !:n
直前に実行したコマンドの n 番目の引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !:0
echo echo
echo
$ echo foo bar baz
foo bar baz
$ echo !:2
echo bar
bar
|
- !^
直前に実行したコマンドの1番目の引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !^
echo foo
foo
|
- !$
直前に実行したコマンドの最後の引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !$
echo baz
foo
|
- !*
直前に実行したコマンドの全ての引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !*
echo foo bar baz
foo bar baz
|
- !:n*
直前に実行したコマンドの n 番目から最後までの引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !:2*
echo bar baz
bar baz
|
- !:n-m
直前に実行したコマンドの n 番目から m 番目までの引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !:1-2
echo foo bar
foo bar
|
- !:-n
直前に実行したコマンドの最初から n 番目までの引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !:-2
echo foo bar
foo bar
|
- !:n-
直前に実行したコマンドの n 番目から最後の1個前までの引数を取得する
$ echo foo bar baz
foo bar baz
$ echo !:1-
echo foo bar
foo bar
|
|
修飾指示子
|
|
- :p
コマンドを表示のみして実行しない
$ echo foo bar baz
foo bar baz
$ touch foo bar baz
$ !e:p
echo foo bar baz
|
- :h
パスのファイル名部分を取り除きディレクトリ名を取得する
$ echo /foo/bar/baz
/foo/bar/baz
$ echo !$:h
echo /foo/bar
/foo/bar
|
- :t
パスのディレクトリ名部分を取り除きファイル名を取得する
$ echo /foo/bar/baz
/foo/bar/baz
$ echo !$:t
echo baz
baz
|
- :r
ファイル名の拡張子を取り除き . の前を取得する
$ echo foo.c
foo.c
$ echo !$:r
echo foo
foo
|
- :e
ファイル名の拡張子を . 付きで取得する
$ echo foo.c
foo.c
$ echo !$:e
echo .c
.c
|
|