長いコマンドを入力する必要があるたびに、履歴を参照できる感嘆符が非常に便利であることがわかりました。たとえば、私が使用した最後のコマンドを!ssh
呼び出すために使用できます。ssh
ただし、検索にスペースで区切られたパラメータを追加しても機能しません。
を実行することで、!ssh -i
文字列 "ssh -i"で始まる最後のコマンドを実行したいと思います。ただし、呼び出される実際のコマンドは引数をssh
含む最後のコマンドであり、そのコマンドに「-i」が追加されます。
を使用できますが、!?ssh -i?
これは他の作業を実行することを意味し、これを達成する簡単な方法が必要であると思います。history|grep ...
毎回入力するのはとても怠けです。
それでは、前述のように、スペースを含む文字列で始まるコマンドを履歴でどのように参照しますか?
編集する問題の説明が十分にはっきりしていないようです。次のような記録があるとしましょう。
ssh -i identity host1
echo ssh -i
ssh host2
これで実行すると、!ssh
3番目のコマンドがssh host2
実行されます。!ssh -i
最初のコマンドを実行するために入力することを期待していましたが、代わりに実行されましたssh host2 -i
(これによりエラーが発生しました)。以下を使用して!?ssh -i?
最初のコマンドを実行できます。2番目のコマンドが存在しない場合にのみ。
答え1
私はあなたがbashのHISTControlのデフォルトの動作を変更したいと思います。この記事では: bashで空白で始まるコマンドを保存しないのはなぜですか?
組織管理
コマンドが履歴リストに保存される方法を制御するコロンで区切られた値のリスト。値のリストに空白の無視が含まれている場合、空白文字で始まる行は履歴リストに保存されません。無視された値のため、前の履歴エントリと一致する行は保存されません。 ignorebothの値はignorespaceとignoredupsの略です。
スキップしたいなら!空白を許可してから、bash以外のシェルを試してみることをお勧めします。魚の殻はあなたの要件に最適です:)
sudo apt-get インストール魚
Bash シェルで試すには、「fish」と入力します。
気に入ったら使い続けることができます。
chsh -s /usr/bin/fish
答え2
コメントをいただいたMark Plotnickに感謝します。解決策が見つかりました。 bashの履歴拡張を使用しませんが。 (私は[bashリファレンスマニュアルセクション9.3.1]を読んだ後、bash履歴拡張を使用してこれを達成することは不可能だと思います。)https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html)
解決策は、グローバル効果のために、次の行をその行に~/.inputrc
配置するか、コメントを削除することです。/etc/inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward
を押すとそのCtrlVコードが見つかり、PageUpコマンドは次のようになります。Bash マニュアルセクション 8.4.2。
その後、PageUpMarkが述べたように、キーを使用して最初のコマンドに移動できます。