bash履歴からコマンドを選択する


20

上ボタンを押すのは面倒で、探していたコマンドを見逃すかもしれません。そのhistoryため、端末で入力すると、以前に入力したすべてのコマンドが番号にインデックス付けされて表示されます。コマンドに関連付けられた番号を呼び出す方法はありますか?


もうインタラクティブなオプションはありますか?これらはエラーが発生しやすい
マット

回答:


31

bashの履歴は多くの有用なことを行うことができますが、Strg-rTerry Wangが言及した検索はその中でも重要なものです。しかし、あなたが要求したとおりに行うこともできます。

で前のコマンドをやり直すことができ!!ます。これにより、前のコマンドを編集することもできます。たとえば、コマンドのルート権限を取得するのを忘れた場合

apt-get install a-long-list-of-packages

そのすべてを再度入力する必要はありません。代わりに呼び出すだけ

sudo !!

履歴から特定の位置でコマンドを再実行する場合!は、たとえば、を使用することもできます

!3

位置3でコマンドを再実行します。これは上からカウントされることに注意してください。したがって、履歴に500個のコマンドを保存している場合、!1「500コマンド前」になります。負の数を使用することもできます。例えば

!-2

最後から2番目のコマンドを再実行します。

次のような文字列で開始した最後のコマンドを再実行することもできます

!apt-

「apt-」で始まった最後の行を再実行します。文字列が行のどこかに現れる最後のコマンドが必要な場合は、次のようなものを使用できます

!?pt-ge

bashの履歴にはもっと面白いことがあります。幅広い可能性の印象を与えるために、履歴からコマンドのパラメーターに特にアクセスできます。そう

!-5:3:p

最後のコマンドから3番目のパラメーターを5番目に出力します。

編集:以下のRudieのコメントに関して、標準設定では、このbash履歴展開は実際に直接実行されます。おそらく次のように説明するのが一番いいでしょう:のような呼び出し!-3は、履歴から最後から3番目のコマンドを持つシェルに置き換えられ、その後、入力(置換を含む)が実行されます。したがって、入力して!-3を押しENTER、最後から3番目のコマンドがだったls ~場合、実際にls ~もう一度入力してENTER「自分で」を押した場合と同じです。

必要ない場合は、シェルオプションを設定できますhistverify。シェルオプションの設定と設定解除については、shoptコマンドを参照してください。histverify設定し、同様の呼び出し!-3だけでは、あなたのコマンドラインにあなたの履歴から交換を書き込みますが、それを直接実行しません。ENTER必要に応じて、重要なものを自分で押すか、または控えてください。


とても!危険です... !-4実行する前に正確に何をしたか知りたいです。または、最初に表示されますか?クールな要約!
ルディ14

1
@Rudieそれは良い点です、私は私の答えを更新しました。履歴機能は、主に作業を高速化し、キーストロークを節約することを目的としています。それで、標準的な「本当に、本当にそれを意味しますか?その目的を少なくとも部分的に破ります。また、たとえできたとしても、通常、「far back」コマンドを呼び出すことはありません!-238。最後から2番目、最後から3番目、おそらく最後の最後のコマンドを思い出すのはそれほど難しくないはずです;)Linux(そして実際にはコンピューティング全般)でよくあることですが、何をしているのかを知っていることが期待されます。そして、あなたは本当に、追加のセーフティネットをしたい場合、それは一つだshopt離れ;)
ヘニングKockerbeck

16

はいあります。たとえば、横に番号1234があるコマンドを実行する場合は、次のようにします。

!1234

その他の便利なもの:

  • 最後に実行したコマンドを実行する場合は、次を実行します。

    !!
  • 最後に実行したlsコマンドを実行する場合は、次を実行します。

    !ls
  • 実行したばかりls /some/long/pathで、実行したいcd場合は、以下を実行します。

    cd !$

詳細については:



3

コマンドの履歴番号を見つけて、それを再度実行する場合!は、たとえば番号を続けて入力し、!1234を押しEnterます。これは歴史の拡大の一部です。修飾子を追加できます。

コマンドを実行する前に編集する場合fc 1234は、外部エディターを呼び出します。

しかし、テリー王は、すでに述べたように含むその履歴番号、決定よりも歴史の中でコマンドの位置を特定する方法は通常より速いがあるCtrl+をRインクリメンタルサーチ(プレス呼び出すためにEnterあなたが実行したいコマンドを見つけた)、またはfc PREFIX以前を実行するためには、で始まるコマンドPREFIX


1

historyコマンドは、すべてのコマンドと、それに関連付けられた番号が表示されます。コマンドライン#135を実行する前に簡単なチェックだけを行いたい場合は、次のように入力できます。

echo !135

これにより、実行される内容が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.