仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

(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

……意味がないか、というか活用できるシーンの見当がつかない。考えてみよう。