コンテキスト
bashで先行入力:良い
bashシェルがビジー状態(初期化、コマンドの実行)の場合、次のプロンプトが表示される前に入力できます。 。
シェルがプログラムを起動した場合、そのプログラムはキーをキャプチャしますが、プログラムが実行されていない場合、またはプログラムが入力をキャプチャしない場合、プロンプトが表示された後、どのタイプがシェルに挿入されます。
例:「sleep 5
」と入力します 、Enterキーを押してから、ls
と入力します Enterキーを押します。 ls
スリープが終了した後に実行されます。実生活では、ls
cp
に置き換えられます 、rsync
または他の多くのプログラム。
これは典型的な先行入力機能であり、何を入力するかを事前に知っていると、時間を大幅に節約できます。
また、いくつかのコマンドをコピーして貼り付け、順番に実行できるので非常に便利です。
実際のユースケースには、シェルの初期化に時間がかかる場合が含まれます。何らかの理由でコンピュータの速度が低下しているか、シェルが低速のネットワークリンク上にあるなどの可能性があります。
bashでの履歴検索:良い
bashプロンプトで、Ctrl-R
と入力できます。 履歴を検索します。
これは、いくつかの古いコマンドライン、または一連のコマンドラインを再利用する場合の非常に時間の節約になります。 Ctrl-R
を押します 、検索するコマンドに典型的な数文字を入力し、Ctrl-O
を押します。 そこから記録されたコマンドを再生するために必要な回数だけ。
履歴検索の先行入力:どのように?
ただし、1つの制限があります。多くの場合、上記のシーケンスを使用して、たとえば次のように入力するとわかります。 Ctrl-R ls
シェルプロンプトが実際に表示される前に、Ctrl-R
一部は無視されますが、ls
一部が表示されます。
正味の効果は、Ctrl-R
と入力する前に、シェルプロンプトが表示されるのを待つ必要があるということです。 、節約された時間の一部を打ち負かします。
質問
Ctrl-R
を使用する方法はありますか? タイプアヘッドの状況でも光栄ですか?
承認された回答:
Ctrl – r カーネルベースのターミナルCookie行処理エンジンによって傍受されています。
sleep
の間 が実行されている場合、端末はクックモードになっています。これは、カーネルベースのttyラインエディタが機能していることを意味します。 ttyラインエディタは、基本的なコマンドライン編集をサポートしています。消去キー(通常は Ctrl に設定) – h (バックスペース)または Del )とkillキー(通常は Ctrl-U )は、このモードで使用できる最もよく知られている特別な編集キーです。このラインエディタは便利です。これにより、readlineもcursesも使用しないインタラクティブなユーティリティが、ユーザーが入力を修正しながら、端末からの入力の完全な行を読み取ることができます。
ただし、このモードでアクティブになる別の特別なキーがあります。 stty -a
の出力で、他のキー設定と一緒に確認できます。 rprnt
という名前で デフォルト設定は…ご想像のとおり…Ctrl – r 。このキーの機能は、他の端末出力が原因で現在のコマンドラインが破損したり、位置がずれたりした場合に、現在のコマンドラインを再描画することです。
これを回避するには、stty rprnt undef
を使用して関数を無効にします。 。
個人的にはCtrlに慣れています – r 再描画コマンドとして解釈され、bash
でそれを実行しようとするたびに驚いています そしてそれは何か違うことをします!