狠狠撸

狠狠撸Share a Scribd company logo
bashbash のヒストリ展開を活用するのヒストリ展開を活用する
USP 友の会
今泉光之
@bsdhack
http://bsdhack.{org,com,net}
bashのヒストリ展開を活用する 2
はじめにはじめに
●
POSIX とは原理主義者ではありません
– 製品としてのソフトウェア作成では意識します
– 決して原理主義者ではありません
– 普段は古くから bash を愛用しています
● あまり知られていないヒストリ展開の紹介
bashのヒストリ展開を活用する 3
!!!!
● 直前に実行したコマンドの再実行
– 他のコマンドの引数としても指定可能
$ cat /etc/ssh/sshd_config
cat: /etc/ssh/sshd_config: Permission denied
$ sudo !!
sudo cat /etc/ssh/sshd_config
[sudo] password for mitz
cat /etc/ssh/sshd_config が sudo で実行される
bashのヒストリ展開を活用する 4
!-!-nn
●
n 回前に実行したコマンドの再実行
– コンパイル→実行の繰り返しなどに便利
$ platex foo.tex
This is pTeX, Version 3.141592-p3.1.9 (euc) (Web2C 7.5.4)
:
$ xdvi foo.dvi
$ !-n
platex foo.text
:
$!-n
xdvi foo.dvi
bashのヒストリ展開を活用する 5
^^foofoo^^barbar
● 直前に実行したコマンドの foo を bar に変更して実行
– 最初に検出された foo を bar に変更する
$ pletex foo.tex
-bash: pletex: command not found:
$ ^e^a
platex foo.tex
This is pTeX, Version 3.141592-p3.1.9 (euc) (Web2C 7.5.4)
:
bashのヒストリ展開を活用する 6
!:[g]s/!:[g]s/foo/barfoo/bar
● 直前に実行したコマンドの foo を bar に変更して実行
– 区切り文字の "/" を任意の文字に変更可能
– g を指定した場合全ての foo が bar に変更される
$ dir /x
dir: cannot access /x: No such file or directory
$ !:s+/+-
dir -x
$ dir /x /a
dir: cannot access /x: No such file or directory
dir: cannot access /a: No such file or directory
$ !:gs+/+-
dir -x -a
bashのヒストリ展開を活用する 7
単語指示子単語指示子
● !:n
– 直前に実行したコマンドの n 番目の引数
● !^
– 直前に実行したコマンドの 1 番目の引数
● !$
– 直前に実行したコマンドの最後の引数
● !*
– 直前に実行したコマンドの全ての引数
bashのヒストリ展開を活用する 8
単語指示子単語指示子
● !:n*
– 直前に実行したコマンドの n 番目から最後までの引数
● !:n-m
– 直前に実行したコマンドの n 番目から m 番目までの引数
● !:-m
– 直前に実行したコマンドの 1 番目から m 番目までの引数
● !:n-
– 直前に実行したコマンドの n 番目から最後の 1 個前までの引数
bashのヒストリ展開を活用する 9
ヒストリ展開される単語の修飾ヒストリ展開される単語の修飾
● :h
– パスのディレクトリ名部分を取得する
$ ls /usr/local/bin/vim
$ cd !$:h
cd /usr/local/bin
bashのヒストリ展開を活用する 10
ヒストリ展開される単語の修飾ヒストリ展開される単語の修飾
● :t
– パスのファイル名部分を取得する
$ ls /usr/local/bin/vim
$ cp !$ !$:t
cp /usr/local/bin/vim vim
bashのヒストリ展開を活用する 11
ヒストリ展開される単語の修飾ヒストリ展開される単語の修飾
● :r
– パスのファイル名部分から拡張子を除外する
$ platex /usr/local/doc/foo.tex
This is pTeX, Version 3.141592-p3.1.9 (euc) (Web2C 7.5.4)
:
$ xdvi !$:r.dvi
xdvi /usr/local/doc/foo.dvi
bashのヒストリ展開を活用する 12
ヒストリ展開される単語の修飾ヒストリ展開される単語の修飾
● :e
– パスのファイル名部分から拡張子を取得をする
$ ls /usr/local/doc/foo.tex
$ cp !$ bar!$:e
cp /usr/local/doc/foo.tex bar.tex

More Related Content

叠补蝉丑のヒストリ展开を活用する