カスタムファイルからCtrl-Rスタイルの対話型検索

カスタムファイルからCtrl-Rスタイルの対話型検索

Bashの対話型履歴検索に似たカスタムテキストファイルを検索できるようにしたいです。

目的の項目が見つかったら、その行を実行します。

ボーナスポイント:各レコードには、検索対象と実行するコマンドの2つのフィールドが含まれています。

私が達成したいのは、サーバーのリストからサーバー名をすばやく自動補完できるようにすることです。

ベストアンサー1

以下を使用して、Bash履歴自体にカスタムファイルをロードできます。history注文するhistory -rコマンド履歴で指定したファイルまたは指定したファイルを読み込みます。HISTFILEそのうちの1つに名前を付けない場合:

history -r ~/custom

Ctrl-Rその後、通常の操作を使用して、履歴の!拡張などを含むカスタムファイルのデータを含む履歴にアクセスできます。

一時的にのみ有効にしたい場合は、現在の履歴を保存してカスタムファイルを読み、最後に通常のファイルを読むことができます。

$ history -w # Or -a if you prefer
$ history -r ~/custom
...
$ history -cr

history -crメモリー内の記録が消去され、標準の記録ファイルから再度読み取られます$HISTFILE。このプロセスを短縮するためにエイリアスを作成することもできます。

または、次を使用して計算された値を履歴に追加できます。history -s。以下はファイルを読むのと同じです。

while read command
do
    history -s "$command"
done < ~/custom

このようにして、任意の履歴エントリを必要な数だけ追加し、利用可能なデータに基づいて計算を実行できます(たとえば、サーバー名とポートのリストを読み取って使用するなどhistory -s "ssh -p $port $servername")。これは関数内でうまく機能します。履歴書き込み、消去、復元の同じオプションがここに適用されます。

最後のオプションとして、HISTFILE起動時に環境に設定すると、bashそのファイルは履歴として扱われます。スクリプトから新しいシェルを起動し、HISTFILEユーザーがコマンドを選択できるように適切に設定できますHISTFILE=~/custom bash。慎重に設定すると、選択したコマンドを実行した直後にシェルを終了することができます。


Bash自体の外ではrlwrapReadlineの他のコマンドラインツールをラップするツールです。rlwrap -H ~/custom cmd...指定された履歴ファイルを使用してコマンドを実行します。ユーザー入力でサーバー名を選択するなど、目的のタスクを正確に実行するようにプログラムを構築してから、コマンドを構築できます。

おすすめ記事