SlideShare 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

What's hot

GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDocker
Kazuhito Miura
 
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
Kazuya Matsubara
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
Takuto Matsuu
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話Kouhei Maeda
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presenKouhei Maeda
 
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
monochrojazz
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
Kouhei Maeda
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おう
Hideaki Miyake
 
U boot-for-zynqberry
U boot-for-zynqberryU boot-for-zynqberry
U boot-for-zynqberry
Akihiro Amagai
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなしTsuyoshi Yamada
 
peco活用術
peco活用術peco活用術
peco活用術
Yuki Ishikawa
 
クリップボード監視と外部コマンド実行 #chibapm
クリップボード監視と外部コマンド実行 #chibapmクリップボード監視と外部コマンド実行 #chibapm
クリップボード監視と外部コマンド実行 #chibapm
鉄次 尾形
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
Kouhei Maeda
 
20151114 jawsug
20151114 jawsug20151114 jawsug
20151114 jawsug
司 知花
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
 
OS development beginner version 20160611
OS development beginner version 20160611OS development beginner version 20160611
OS development beginner version 20160611
Langur
 
78tch
78tch78tch
78tch
78tch
 
FreeBSDのススメ
FreeBSDのススメFreeBSDのススメ
FreeBSDのススメ
kunst1080
 
Pythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行するPythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行するaoshiman
 

What's hot (20)

GUI何処行ったんDocker
GUI何処行ったんDockerGUI何処行ったんDocker
GUI何処行ったんDocker
 
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presen
 
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おう
 
U boot-for-zynqberry
U boot-for-zynqberryU boot-for-zynqberry
U boot-for-zynqberry
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
 
peco活用術
peco活用術peco活用術
peco活用術
 
クリップボード監視と外部コマンド実行 #chibapm
クリップボード監視と外部コマンド実行 #chibapmクリップボード監視と外部コマンド実行 #chibapm
クリップボード監視と外部コマンド実行 #chibapm
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
 
20151114 jawsug
20151114 jawsug20151114 jawsug
20151114 jawsug
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
Hostsの活用
Hostsの活用Hostsの活用
Hostsの活用
 
OS development beginner version 20160611
OS development beginner version 20160611OS development beginner version 20160611
OS development beginner version 20160611
 
78tch
78tch78tch
78tch
 
FreeBSDのススメ
FreeBSDのススメFreeBSDのススメ
FreeBSDのススメ
 
Pythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行するPythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行する
 

Similar to Bashのヒストリ展開を活用する

20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
kunst1080
 
今から始めるzsh
今から始めるzsh今から始めるzsh
今から始めるzsh
Hideaki Miyake
 
LinAction Theme Docker
LinAction Theme DockerLinAction Theme Docker
LinAction Theme Docker
cyberblack28 Ichikawa
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
Masataka Tsukamoto
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみようMasahiko Hashimoto
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
Satoshi Yazawa
 
OSS開発者を増やしたい!
OSS開発者を増やしたい!OSS開発者を増やしたい!
OSS開発者を増やしたい!
Kouhei Sutou
 

Similar to Bashのヒストリ展開を活用する (9)

20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
 
Oss dev-04
Oss dev-04Oss dev-04
Oss dev-04
 
今から始めるzsh
今から始めるzsh今から始めるzsh
今から始めるzsh
 
LinAction Theme Docker
LinAction Theme DockerLinAction Theme Docker
LinAction Theme Docker
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
 
sshdのお話
sshdのお話sshdのお話
sshdのお話
 
OSS開発者を増やしたい!
OSS開発者を増やしたい!OSS開発者を増やしたい!
OSS開発者を増やしたい!
 

More from bsdhack

男の子ってこういうのが好きなんでしょ?
男の子ってこういうのが好きなんでしょ?男の子ってこういうのが好きなんでしょ?
男の子ってこういうのが好きなんでしょ?
bsdhack
 
シグナル
シグナルシグナル
シグナル
bsdhack
 
FreeBSDのブートプロセス
FreeBSDのブートプロセスFreeBSDのブートプロセス
FreeBSDのブートプロセス
bsdhack
 
正規表現
正規表現正規表現
正規表現
bsdhack
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
bsdhack
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
bsdhack
 

More from bsdhack (6)

男の子ってこういうのが好きなんでしょ?
男の子ってこういうのが好きなんでしょ?男の子ってこういうのが好きなんでしょ?
男の子ってこういうのが好きなんでしょ?
 
シグナル
シグナルシグナル
シグナル
 
FreeBSDのブートプロセス
FreeBSDのブートプロセスFreeBSDのブートプロセス
FreeBSDのブートプロセス
 
正規表現
正規表現正規表現
正規表現
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 

Bashのヒストリ展開を活用する