(bash)コマンドライン操作のノウハウ備忘録
コマンドの再実行
知識としては知っているけど、活用したことがない。これは便利!というシチュエーションも想像できない。
!!コマンドくらいなら使うけど、Ctrl+p/Ctrl+nで移動したり、Ctrl+rで検索する方が手っ取り早い気が……。(末尾に「:p」をつけて実行するコマンドが確認できる、というのが地味に便利?)
直前のコマンドを再実行する | $ !!; |
コマンドの実行履歴を、前方一致で検索して再実行する | $ !(検索語); |
コマンドの実行履歴を、前方一致で検索して再実行する | $ !?(検索語); |
指定回数前に実行したコマンドを再実行する | $ !-(回数); |
ヒストリ番号を指定してコマンドを再実行する | $ !(ヒストリ番号); |
末尾に「:p」をつけて、実行するコマンドを確認 | $ !x:p;とか$ !-5:p;とか |
引数の再利用
こっちの方が便利だとは思うけど、あんまり活用できてない。
直前に実行したコマンドの全ての引数 | !* | $ cp a b c /d/; | a b c /d/ |
直前に実行したコマンドの最後の引数 | !$ | $ cp a b c /d/; | /d/ |
直前に実行したコマンドの最後の引数 | !$ | $ cp a b c /d/; | /d/ |
コマンドを確認してから実行するケースとか。
$ cat do.sh ...(実行内容を確認)... $ sh !*
あと、ワイルドカードを使う前に、対象を確認しながらコマンドを実行するとか。
$ echo rm *.txt rm foo.txt bar.txt 42.txt $ !* rm foo.txt bar.txt 42.txt remove foo.txt? y foo.txt remove bar.txt? y bar.txt remove 42.txt? y 42.txt
コマンド実行履歴の再利用
といっていいのか分からないけど、直前に実行したコマンドの文字列を一部置換して再実行する。(^original^reuse)
ベタな利用シーンというのは、typoしたときとか。
$ ls /tnp
$ ^n^m
あとは入力を再利用したりとか。
$ ls /tmp/foo/bar
$ ^tmp^usr
これだけだとあんまり美味しい感じがしない。
手動デプロイで開発環境……ステージングから本番に、といった操作を確実に実行するというのはどうだろう?
$ scp /var/www/dev host/var/www/app/ $ ^dev^staging
……意味がないか、というか活用できるシーンの見当がつかない。考えてみよう。