Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

毎日の作業で本当に役立つBash履歴ショートカット7選

多くのBash履歴ショートカットのガイドは、利用可能なショートカットを網羅的にリストアップしています。しかし問題なのは、私がショートカットを一度使ってみても、すべてのパターンを試そうとして頭が混乱し、その後日常業務に戻ると完全に忘れてしまうことでした。結局残っていたのは、Bashを使い始めた頃に覚えた有名な!!のテクニックだけでした。

つまり、ほとんどのショートカットは記憶に定着しなかったのです。

この記事では、私が毎日実際に使っているショートカットを紹介します。内容の一部は私の著書『Learn Bash the Hard Way』(プレビューを読むことで詳細を確認できます)に基づいています。

私がこれらのショートカットを使っているのを見た人は、「今、何をしたの!?」とよく聞いてきます。特別な努力や知識は必要ありませんが、本当に身につけるには、1日1つのショートカットを1週間使い続け、その後次のものへ移行することをおすすめします。指が自然と動くようになるまで時間をかける価値は十分にあります。長い目で見れば、節約できる時間は相当なものになるからです。

1. 「最後の引数」:!$

この記事から1つだけショートカットを覚えるなら、これを選びましょう。直前のコマンドの最後の引数を、現在のコマンドラインに展開してくれます。

次のようなシナリオを考えてみましょう。

$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory

あっ、コマンドにwrongfileというファイル名を入力してしまいました。rightfileとすべきでした。

前のコマンドを打ち直してwrongfileをrightfileに置き換えても構いませんが、代わりに次のように入力できます。

$ mv /path/to/rightfile !$
mv /path/to/rightfile /some/other/place

これでコマンドは正常に動作します。

Bashには同じ目的を達成できる他のショートカットもありますが、直前のコマンドの最後の引数を再利用するこのテクニックが、私が最も頻繁に使うものです。

2. 「n番目の引数」:!:2

こんな経験はありませんか?

$ tar -cvf afolder afolder.tar
tar: failed to open

他の多くの人と同じように、私はtar(やln)の引数を、認めたくないくらいの頻度で間違えます。

このように引数の順序を入れ替えたい場合は、次のように実行できます。

$ !:0 !:1 !:3 !:2
tar -cvf afolder.tar afolder

これで名誉は無事に守られます。

直前のコマンドの各要素には0からインデックスが振られており、!:の後に番号を指定することで展開できます。

もちろん、すべての引数ではなく、特定の引数だけを再利用する用途にも使えます。

3. 「すべての引数」:!:1-$

次のようなコマンドを実行したとしましょう。

$ grep '(ping|pong)' afile

引数自体は正しいのですが、ファイル内のpingまたはpongに一致させたいのに、egrepではなくgrepを使ってしまいました。

egrepと入力し始めましたが、他の引数を打ち直すのは面倒です。そこで!:1-$ショートカットを使えば、前のコマンドの2番目の引数(0からインデックスが振られている点に注意)から最後の引数($記号で表現)までをまとめて展開できます。

$ egrep !:1-$
egrep '(ping|pong)' afile
ping

1-$を選ぶ必要はなく、1-23-9(前のコマンドにそれだけの引数があれば)といった部分的な範囲指定も可能です。

4. 「n個前のコマンドの最後の引数」:!-2:$

ここまでのショートカットは、直前のコマンドをどう修正すればよいか即座にわかる場合には便利ですが、多くの場合、元のコマンドのに別のコマンドを実行してしまい、直前のコマンドが参照したい対象ではなくなることがあります。

例えば、先ほどのmvの例で、ミスをした後にフォルダの中身を確認するためにlsを実行したとします。

$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
$ ls /path/to/
rightfile

この状態では!$ショートカットはもう使えません。

こうしたケースでは、!の後に-n:(nは履歴を遡るコマンド数)を挟むことで、より古いコマンドの最後の引数を取得できます。

$ mv /path/to/rightfile !-2:$
mv /path/to/rightfile /some/other/place

繰り返しになりますが、一度覚えてしまうと、意外なほど頻繁に必要になることに気づくはずです。

5. 「フォルダだけを取り出す」:!$:h

一見すると地味なショートカットですが、私は毎日何十回も使っています。

次のようなコマンドを実行したと想像してください。

$ tar -cvf system.tar /etc/system
tar: /etc/system: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors.

まずやりたいのは、/etcフォルダに移動して中身を確認し、どこを間違えたのか把握することでしょう。

これは次のように一撃で実行できます。

$ cd !$:h
cd /etc

これは「直前のコマンドの最後の引数(/etc/system)を取得し、末尾のファイル名部分を取り除いて、/etcだけを残す」という意味です。

6. 「現在の行を参照」:!#:1

何年もの間、現在入力中の行の引数を参照できるのか時々疑問に思っていましたが、ついに調べて学んだときは、もっと早く調べておけばよかったと悔やみました。私が最もよく使うのは、バックアップファイルを作成するときです。

$ cp /path/to/some/file !#:1.bak
cp /path/to/some/file /path/to/some/file.bak

指に覚えさせれば、次に紹介する方法の代わりとして非常に素早く使えるテクニックです…

7. 「検索と置換」:!!:gs

これは参照先のコマンド全体を検索し、最初の2つの/に囲まれた内容を、次の2つの/に囲まれた内容に置き換えます。

例えば、sキーが壊れてfが出力されてしまうことを世界に伝えたいとしましょう。

$ echo my f key doef not work
my f key doef not work

そして、単にfキーを誤って押してしまっただけだと気づきます。すべてのfsに置き換えるには、次のように入力します。

$ !!:gs/f /s /
echo my s key does not work
my s key does not work

この機能は単一の文字だけでなく、単語や文の置き換えにも使えます。

$ !!:gs/does/did/
echo my s key did not work
my s key did not work

試してみよう

これらのショートカットを組み合わせられることを示すために、次の一連のコマンドが何を出力するか、推測してみてください。

$ ping !#:0:gs/i/o
$ vi /tmp/!:0.txt
$ ls !$:h
$ cd !-2:h
$ touch !$!-3:$ !! !$.txt
$ cat !:1-$

まとめ

Bashは、日々コマンドラインを操作するユーザーにとって、エレガントなショートカットの宝庫です。学ぶべきヒントやテクニックは数え切れないほどありますが、今回紹介したものは私が頻繁に活用しているお気に入りです。

Bashについてさらに深く学びたい方は、著書『Learn Bash the Hard Way』を手に取るか、オンラインコース「Master the Bash shell」をチェックしてみてください。

この記事はIan氏のブログZwischenzugs.comに最初に投稿されたもので、許可を得て転載しています。

  1. 知っておくべき便利なLinux Bashコマンドラインショートカット徹底解説

    この記事では、すべてのLinuxユーザーに役立つBashコマンドラインショートカットを多数紹介します。これらのショートカットを覚えておけば、過去に実行したコマンドの呼び出しや再実行、エディタの起動、コマンドライン上でのテキストの編集・削除・変換、カーソル移動、プロセス制御などを、素早く効率的に行えるようになります。 本記事は、コマンドラインの基本を学び始めたばかりのLinux初心者にとって特に有益ですが、中級者や上級者の方にとっても、意外と知られていない実用的なヒントが見つかるはずです。以下では、Bashのキーボードショートカットをカテゴリ別に分けて解説していきます。 エディタを起動する ター

  2. VPNは本当に安全?今すぐ導入すべき理由と安全なVPNの選び方を徹底解説

    インターネットの利用には、時にリスクが伴います。特に、HTTPサーバー上のウェブサイトを閲覧している場合や、公共のWi-Fiにデバイスを接続している場合には注意が必要です。こうした保護されていない接続では、閲覧履歴や保存されたパスワード・認証情報、その他の個人情報が第三者にさらされる危険性があります。 ブラウザセッションやオンライン活動を盗み見されるのを防ぐための有効な手段がVPN(Virtual Private Network:仮想プライベートネットワーク)です。VPNの仕組みを簡単に説明すると、自分のネットワークのIPアドレスを隠蔽し、サイトサーバーとの通信を暗号化して追跡不可能にするとい