入力を受け入れる単純なwhileループがあります。
#!/bin/bash
while true; do
read -rep $'\n '"$USER"'> ' userInput
echo "$userInput"
done
例:
./input.sh
username> command1
command1
username> command2
command2
コマンド履歴を持つことは可能ですか?キーボードを押し上げて、以前に実行されたコマンドを(whileループを離れることなく)表示できるようにするには?
小さなReadlineラッパーrlwrap
を使用できます。これは、自分で実装しないユーティリティにコマンド履歴を提供する、きちんとした小さなツールです。
スクリプト自体にrlwrap
を使用します。
rlwrap -a ./script.sh
これにより、~/.script.sh_history
という履歴ファイルが保存され、現在のセッションだけでなく、将来のセッションでもそのファイルを使用して、ステップスルーできる種類の履歴が提供されます。
rlwrap
のマニュアルを参照してください。
rlwrap
は、ほとんどのUnicesでパッケージとして一般的に入手できますが、 そのGitHubリポジトリ から入手することもできます。
history -s
を使用して履歴リストを編集し、read -e
を使用して履歴を表示できるようにすることができます。
#!/bin/bash
while true; do
read -rep $'\n '"$USER"'> ' userInput
history -s "$userInput"
echo "$userInput"
done
コマンド履歴にはさまざまなオプションがあることに注意してください。スクリプトとインタラクティブシェルでは、動作が大きく異なる場合があります。たとえば、コマンド履歴はスクリプトでファイルから自動的にロードまたはファイルに保存されません。これは、状況によっては望ましい場合と望ましくない場合があります。しかし、そうでない場合はコードを追加することで修正できます。