[ 自作ソフトウェア | FreeBSDトップ | FIVA ]


BASH

daemon


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


Last Update: Apr. 19 2006 Copyright © Mitzyuki IMAIZUMI 2002,2004,2005 All Rights Reserved,