BASH:whileループでコマンド履歴を表示するには?

BASH:whileループでコマンド履歴を表示するには?

入力を受け入れる単純なwhileループがあります。

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    echo "$userInput"
done

例:

./input.sh 

 username> command1
command1

 username> command2
command2

コマンド履歴を持つことはできますか?それでは、キーボードを押して以前に実行されたコマンドを表示できます(whileループを出ることなく)。

答え1

小さなReadlineラッパーを使用できますrlwrap。これは、独自に実装していないユーティリティのコマンド履歴を提供するきちんとした小さなツールです。

rlwrapスクリプト自体で使用できます。

rlwrap -a ./script.sh

これにより、呼び出された履歴ファイルが保存され、~/.script.sh_historyそのファイルを現在のセッションだけでなく将来のセッションでも使用して段階的に実行できる履歴が提供されます。

マニュアルを参照してくださいrlwrap

rlwrap通常、ほとんどのUnicesはパッケージとして提供されますが、GitHubリポジトリ

答え2

history -s編集履歴リストを使用してread -e履歴を確認できます。

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    history -s "$userInput"
    echo "$userInput"
done

コマンド履歴に関するさまざまなオプションがあります。動作は、スクリプトと対話型シェルの間で非常に異なる場合があります。たとえば、コマンド履歴はスクリプトのファイルから自動的にロードまたは保存されません。これはあなたの場合に必要な場合もあれば必要ではない場合もあります。ただし、そうでない場合は、コードを追加して問題を解決できます。

関連情報