ヒストリーに残った直前のコマンドを加工してコマンド入力を楽にする方法を紹介する。
Contents
直前に実行したコマンドをもう一度実行
直前に実行したコマンドを実行するコマンドは !! である。
$ echo 'Hello'
Hello
$ !! # 直前のコマンドを実行
echo 'Hello'
Hello
!! は sudoを付け忘れて Permission denied のエラーが出たときに便利だ。
$ rm /path/to/file
rm: Permission denied
$ sudo !! # sudoを付けて直前のコマンドを実行
直前のコマンド引数を使う
直前のコマンド引数を参照するには !$ を使う。
コマンドを実行したら大量に出力が流れて、「さっきの引数なんだっけ?」というときに便利。
$ touch /path/to/file
$ echo !$
echo /path/to/file
/path/to/file
よくある使い方としては、touchした後に chmod !$でパーミッションを変えるとか、
ls した後に rm で削除するとき。
$ touch /path/to/file
$ chmod 666 !$ # 直前で利用した引数を参照してchmod
chmod 666 /tmp/test
$ ls /path/to/file/which/should/be/removed
$ rm !$
rm ls /path/to/file/which/should/be/removed
直前のコマンドの一部を変更して実行
直前のコマンドを置換するには ^ を使う。
echo hoge
hoge
$ ^hoge^fuga # 直前のコマンドのhogeをfugaに置換して実行
echo fuga
fuga
^ は最初に現れた文字を1度だけ置き換える。
引数を変えるために使うことが多いが、コマンドのほうを置換することもできる。
$ cat /path/to/file
$ ^cat^rm # 直前のコマンドのcatをrmに置換して実行
rm /path/to/file
直前のコマンドを参照する !! を元に置換すればもっと複雑な置換もできる。
echo hogehoge
!!:gs/hoge/fuga/ #直前のコマンドに含まれるhogeを全部fugaに置換
echo fugafuga
fugafuga