nanisore oishisou

Webエンジニアあるまさんのゆるふわ奮闘記。

あ、sudoつけ忘れたってときに便利なやつ

おはようございマンモス!
いまだに『君の名は』を見られていないベル子です。
見たいなー見たいなー。私も誰かと入れ替わりたいなー。

今日は、少し前にジェフリーに教えてもらった便利技をみんなに教えてあげようと思います。
ジェフリーって誰だよと思った人も多いと思いますが、
ベル子愛用のスクリーンキャスト「Laracasts」のマスターです。
Laracastsという名前ですが、内容は非常に多岐に渡っていてLaravel以外にPHPの基礎から始まり、オブジェクト指向プログラミングとかPHPデザインパターンとかVimマスターコースとかES2015とかVue.js 2.0コースとか、
とにかくカバー範囲が広くてほぼ毎日のように更新があるというのが特徴です。
フリーで見られる動画も多いのですが、あまりにも充実してるので感謝の気持ちを込めて私は購読しています。

Laracastsで私が一番好きなポイントは、実はカバー範囲が広いという以外に、ジェフリーのコーディングの速さです。
私は人がコーディングしているのを見るのが大好きという、少しアレな性質を持ち合わせているので、見てるだけでとてもワクワクして時間を忘れてしまいます。うっとり。
あと、コーディング中のちょっとしたTipsも本筋とは関係なくさりげに教えてくれます。
そういうところも好きです。

という感じで先日ジェフリーがこっそり教えてくれた便利技です。

$ rm -rf kuro_rekishi

とかした場合に

rm: cannot remove `kuro_rekishi/yonaka_no_tweet.json': 許可がありません

とか出て、「あ、sudoつけ忘れた」と思ったりラジバンダリすることがあると思います。

そんなときは

$ sudo !!

と打ち込みエンターを叩き込むと

ドーーーーーーーーん

$ sudo rm -rf kuro_rekishi

前のコマンドーにsudoが追加されて蘇ります。
なんて便利なんや!!

このビックリマーク戦法(専門的には履歴展開history expansionというらしい)には他の使い方もあるようで

たとえばhistory打って直近が以下のような履歴になってるとして

10021  git remote -v
10022  history
10023  history 10
10024  ls -al
10025  ls app
10026  ls -al app

直前のコマンドを展開

$ !!
$ ls -al app

hogeから始まる直近のコマンドを展開

一番最近 ls 使ったときのオプションと引数を展開
$ !ls
$ ls -al app

history番号を指定して展開

$ !10022
$ history

n個前のコマンドを展開

2個前のコマンドを展開
$ !-2
$ ls app

コマンドの一部を検索して展開

一番最近のgit remote -vのような間にある文字で検索して展開
$ !?remote?
$ git remote -v

n番目の文字を展開(0始まり)

$ !!:1
$ -al

lsをcdにしたい

ls -alの場合は引数は2番目となるので
$ cd !!:2
$ cd app

最後の引数

もっと簡単に最後の引数を代入したいときは$を使えばいい
$ cd !!:$
$ cd app

最初の引数

$ cd !!:^
$ cd -al

コマンド以外全部持ってくる

$ !!:*
$ -al app

1番目以降全部持ってくる

$ !!:1*
$ -al app

拡張子を除いたファイル名

圧縮ファイルを解凍して展開しcdでディレクトリに入る
直前のコマンドの最後の引数の拡張子を削除(:r)
$ tar xzvf keshite_aketehaikenai.tgz
$ cd !!:$:r


直近のコマンドの一部を置換

そのようなディレクトリはないと怒られたときは^置換前^置換後で直近のコマンドを置換できる
$ cd ppap
cd: そのようなファイルやディレクトリはありません: ppap
$ ^ppap^app
$ cd app


ここまで書いたけど、もっと詳しくまとまってるページがあったので
▼詳しいことは以下を参照
http://d.hatena.ne.jp/zariganitosh/20131108/bash_history_expansion



ということで、とりまsudoを忘れたときは
sudo !!
「すーどぅーべんべん」と覚えましょう!

Goodbye Everyoneのフランス語を調べたら、
Au revoir tout le mondeと出てきたのでやっぱりフランス語は難しい。

アデュー皆様。