私は外見上のチェックボックスの動作をエミュレートする非常に単純なbashスクリプトを実行しようとしています! 私はいくつかのオプションを表示し、左または右の矢印キーのキーを押すことに応じて、次のチェックボックスにカーソルを移動します。私はすでに、矢印キーを検出するためにREADとAnsiiのエスケープシーケンスを使用してこれを行いました。そして、カーソルを移動するためにtputを使用します。bashスクリプトを使ったチェックボックス
私の問題は、特定の文字(たとえばx)を押してから別の操作を行う必要があることです。しかし、どのように私はこのキープレスを検出することができますと同時に矢印キーが押されているかどうかを検出しますか?
ansiiコードを検出するには、3文字を読み取る必要があり、X文字(「選択」するためのキー)を使用する必要があります。1文字だけを読む必要があります。
また、ユーザーは左矢印キーまたは右矢印キーまたはxキーを押すことができるようにしようとしていますが、他のキーを押した場合は何も起こりません。
私はこれまでのところ、これをやった:
#!/bin/bash
## Here I just print in the screen the "form" with the "checkboxes"
function screen_info(){
clear
cat <<EOF
/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_
||
|| 1[ ] 2[ ] 3[ ]
||
#############################
EOF
}
## This function detects the arrow keys and moves the cursor
function arrows(){
## I use ANSII escape sequences to detect the arrow keys
left_arrow=$'\x1b\x5b\x44' #leftuierda
right_arrow=$'\x1b\x5b\x43' #rightecha
just_x_key=""
## With tput I move the cursor accordingly
cursor_x=14
cursor_y=3
tput cup $cursor_y $cursor_x
while [ -z "$just_x_key" -o "$just_x_key" != "$just_x_key" ]; do
read -s -n3 key
while [ `expr length "$key"` -ne 3 ]; do
key=""
read -s -n3 key
break
done
case "$key" in
$left_arrow)
if [ $cursor_x -gt 14 ]; then
cursor_x=`expr $cursor_x - 8`
fi
tput cup $cursor_y $cursor_x
#This is supposed to be a simple condition detecting the x key pressed wich I want to trigger something... But how to read a single character to this condition and 3 characters at the same time if the user presses the arrow key ???? =/
#read -s just_x_key
#if [ $just_x_key == x ]; then
# echo X
# tput cup 7 15
# echo "YOU PRESSED THE RIGHT KEY!!! =D"
#fi
;;
$right_arrow)
if [ $cursor_x -lt 28 ]; then
cursor_x=`expr $cursor_x + 8`
fi
tput cup $cursor_y $cursor_x
#read -s just_x_key
#if [ $just_x_key == x ]; then
# echo X
# tput cup 7 15
# echo "YOU PRESSED THE RIGHT KEY!!! =D"
#fi
;;
esac
done
exit $?
}
#EXECUTION
#=========
## I just call the functions!
screen_info
arrows
は、はい、私は知っている、それはこれまでで最も完璧なコードではないのですが、私は学ぶことをしようとしています。提案は非常に高く評価されます。
まだbashの 'select'ステートメントを見ましたか?正確なチェックボックスではありませんが、番号付きのメニューです。 – SiegeX
@SiegeXはい私はこのコマンドについて知っていて、試しましたが、キーボード上の特定のキーだけを受け入れる方法はありませんでした。私は私の小さなスクリプトがユーザー安全であることを証明したい= P私はユーザーがちょうど何も入力することができない方法を意味する! selectを使用しても、オプションが1,2,3の場合、ユーザーはidfsbhisdolasokjcmnhと入力することができ、必要なものを入力し、キーボードの残りの部分を「ロック」するように強制することができます。あなたの返信をありがとう;) – Metafaniel