(2023-04-03 初稿 - 2023-04-08 修正)
以前、pythonでも同様にキー入力を受けるためのスクリプトを紹介した。
タイトルにある「inkey$」って、Basicにある関数(もう、知らない人の方が多いか…^^;)で、Enterしなくてもキー入力が返ってくる。
ゲーム等のすばやいキー入力を必要とする場合には、必須の機能。
このページでは、併せて矢印キー等の特殊キーの入力も得たかったので、ネットで検索して以下のページを参考にスクリプトを組んだ。多謝。
それでは、早速作成したスクリプトを紹介。
#!/usr/bin/bash # inkey() のようなものをbashのreadで作る # ver0.01 2023-03-23 start read_char() { local CHAR rest IFS= read -r -s -n1 CHAR if $CHAR == $'\x1b' ; then # 先頭がバックスラッシュ read -r -n2 -s rest CHAR+="$rest" fi #echo $CHAR case $CHAR in "") echo "Enter" ;; $'\x7f') echo "Backspace" ;; $'\x20') echo "Space" ;; $'\x1b\x5b\x41') #up arrow echo "Up" ;; $'\x1b\x5b\x42') #down arrow echo "Down" ;; $'\x1b\x5b\x43') #right arrow echo "Right" ;; $'\x1b\x5b\x44') #left arrow echo "Left" ;; *) echo $CHAR esac } if [[ ${#BASH_SOURCE[@]} == 1 ]]; then RTN=$(read_char) echo $RTN fi
最後の方のifにある${#BASH_SOURCE[@]} == 1は、上記のスクリプトを単体で実行する場合と、他のスクリプトからimportして実行する場合に便利なように記述している。
詳しくは、以下のページを参照のこと。
実際に呼び出し側のスクリプトでは、以下のようになる。
source ~/bin/inkey for i in {1..10}; do echo -n "Input any key:" char=$(read_char) case "$char" in "q") break ;; esac done
以上、皆さんの参考になれば。