私は使った
history | less
前のコマンドの行を取得し、左側の数字から、繰り返したい行を見つけました(例:22)
!22
コマンドプロンプトで動作し、そのときに実行した行で一連のコマンドを実行しました。感嘆符が使用されている場所、bashによって実行されるアクションの観点でそれが何を表しているのか、どこで使用するのかはわかりません。ドキュメントからは、「具体的な」説明は表示されません。
私は使った
history | less
前のコマンドの行を取得し、左側の数字から、繰り返したい行を見つけました(例:22)
!22
コマンドプロンプトで動作し、そのときに実行した行で一連のコマンドを実行しました。感嘆符が使用されている場所、bashによって実行されるアクションの観点でそれが何を表しているのか、どこで使用するのかはわかりません。ドキュメントからは、「具体的な」説明は表示されません。
回答:
!
これは、端末で矢印キーを使用できるようになる前に、Cシェルに最初に登場した機能です。現在のコマンド番号をプロンプト(PS1="\!$ "
)に追加すると、画面をすばやく確認して過去のコマンドの番号を取得できる場合に特に便利です。
矢印キーなどを使用しCtrl-Rてコマンド履歴を検索できるようになったので、この機能の使用法はあまり見当たりません。
まだ役に立つと思われるバリアントの1つは!!
、で、前のコマンドを再実行します。単独では、!!Enter単にを超える速度を見つけることはできませんが↑ Enter、より大きなコマンドに組み合わせると便利です。
例:共通パイロットエラーにsudo
基づくシステムは忘れることでsudo
特別な権限が必要なコマンドの接頭辞を。初心者がコマンド全体を再入力します。勤勉な学生は、シェルのコマンド履歴からコマンドを編集します。賢明な1つのタイプsudo !!
。
Bashでは!
、set +o histexpand
またはでシェルの処理を無効にできますset +H
。Zshで無効にできset -K
ます。
sudo
など)追加したい場合は、を実行できますsudo !!
。「Up / Ctrl-A(または幸運な場合はHome)/ sudo / space / enter」よりも少し速いかもしれません。YMMV。:)
echo 'Hi!'
またはecho "Hi!"
かecho Hi\!
。すべて同じことをします。
setopt NO_BANG_HIST
zshの中でより多くの記憶に残るかもしれません-K
。
ここでこれ以上回答がない場合は、スーパーユーザーに関する質問があります。最近読んだので。では、bashのmanページ、あなたは巨大なセクションと題し見つけることができます歴史EXPANSION問題についてを。
最後のコマンド、またはコマンド番号Xを実行するだけでなく、ホスト全体!cat
を実行できますcat
。または!?bash?:s/bash/csh/
、を含む最後のコマンドを実行しますが、bash
それに置き換えcsh
ます。
!!:s/bash/csh/
実際に最後のコマンドを実行し、bashをcshに置き換えます(存在する場合)。bashを含む最後のコマンドではありません。それは!?bash?:s/bash/csh/
多分!?bash?:s/%/csh/
man
ページをじっと見つめていても、この機能は非常にあいまいです。関連するセクションを指摘していただきありがとうございます。実際のドキュメントでは、それが十分に説明されている唯一の場所です。
次のような方法でさらに多くのことができます!
。
!-3
!ls
などなど。知っておくべき15のLinux Bash History Expansionの例を参照してください
もちろん!!
、bashシェルで最後のコマンドを再利用することもできます。そして!$
、最後のコマンドの最後の部分を再利用する必要があります。
たとえば、いくつかのファイルを表示する
less path/to/your/file.txt
同じファイルを編集したい場合!$
は、最後のコマンドからファイルパスのみを取得するために使用できます
vim !$
$touch f1 f2
そして次に$vim !$
評価します$vim f2