対話型スクリプトでは、キーボードのキーストロークは機能しません!

対話型スクリプトでは、キーボードのキーストロークは機能しません!

私はスクリプトをインタラクティブにするためにbashでこのコードを使用しています。私の言葉は、interactiveスクリプトが私のデータのパスが何であるかのようないくつかの質問をするようにすることです。

#!/bin/bash -ef
read userInput
if [[ -n "$mypath" ]]
then
datadir=$mypath 
fi
printf "YOUR PATH TO DATA IS: $datadir  ";

次の質問があります。

  1. 以前のコードでは、単語を完全に表示できませんでした。特に、TABキーを使って単語を完成したり、right/left arrows文字を見てみると、さらにそうです。たとえば、パスの作成中に間違いを犯した場合、などのキーを使用してこの間違いを修正しようとすると、そのキーは正しく機能しませんHomeEndarrows left/right
  2. 私のアイテムemptyデータパスがない場合、または空のフィールドのみがある場合)、コードでパスを再度尋ねるか、プロセスを中断して終了するようにしたいと思います。

どんな提案でも高く評価いたします。

ベストアンサー1

while ((1)) ; do
  echo please define path:
  read input
  echo is $input ok [y/n/abort]?
  read answer
  case $answer in
    [yY]|[Yy][Ee][Ss]*)
      path=$input
      break
      ;;
    [Aa][Bb][Oo][Rr][Tt])
      exit
      ;;
    [Nn]|[Nn][Oo])
      ;;
    *)
      echo invalid input, please try again
      ;;
  esac
done

つまり、caseステートメントの無限ループは、ユーザーがアイテムを検証したときにのみ中断されます。もちろん、フィードバックループを実行する前に、そのパスが実際に存在することを確認することもできますcase

おすすめ記事