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