bashの履歴展開
最初にUNIXを触ったのは10数年前で、そのUNIXがどんなものだったかもシェルが何というものだったかも知らずに使ってたんですが、とにかくその時使っていた環境には、シェルにreadlineはありませんでした。
何で当時は、"!"で履歴展開をよく使ってました。今はCTRL-Pがあるのであまり使わないんですが、久しぶりにどんな風に使っていたか思いだしてみようと思います。たまには役に立つかもしれません。
直前のコマンドをもう一度実行
$ !! # 直前のコマンドを実行 $ !-1 # 履歴の1つ前を実行 $ history ... 1028 cd /tmp/ 1029 ls 1030 pwd 1031 pwd 1032 pwd 1033 history 1034 ls -l 1035 pwd 1036 ls -l 1037 history $ !1036 # 履歴の1036番目を実行 $ !ls # 直前のlsを実行 ls -l ...
履歴の一部を展開
$ vim foo/bar/baz.txt ... $ git status !:1 # 直前のコマンドの第一引数に展開 git status foo/bar/baz.txt # On branch master ... $ cp !vim:1 !vim:1:s/txt/txt.orig/ # 直前のvimコマンドの第一引数の"txt"を"txt.org"に置換して展開 cp foo/bar/baz.txt foo/bar/baz.txt.orig $ ls -l !cp:$ # 直前のcpコマンドの最後の引数に展開 ls -l foo/bar/baz.txt.orig $ cd !cp:$:h # 直前のcpコマンドの最後の引数のディレクトリ部分に展開 cd foo/bar