シェルスクリプトを使ったことがないので、これはまったく新しいことです。私はうまくいくものを作ることができましたが、ひどく最適化されており、それをどのように改善するのか分かりません。どちらかといえば、それはかなり陽気なスクリプトです:
#/bin/bash
get_char() {
old_tty_settings=`stty -g`
stty -icanon min 0 time 1
stty cbreak
grabbed_char=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
stty -cbreak
stty "$old_tty_settings"
}
while true; do
unset char00
unset char01
unset char02
unset char03
unset char04
unset char05
echo -e "\nWaiting for keystroke..."
read -n 1 char00
while true; do
get_char; char01=$grabbed_char
if [ "$char01" != "" ]; then get_char; char02=$grabbed_char
else break
fi
if [ "$char02" != "" ]; then get_char; char03=$grabbed_char
else break
fi
if [ "$char03" != "" ]; then get_char; char04=$grabbed_char
else break
fi
if [ "$char04" != "" ]; then get_char; char05=$grabbed_char
else break
fi
done
fullstring=$char00$char01$char02$char03$char04$char05
echo -e "\nFULLSTRING: !$fullstring!"
done
リストはずっと長いですが、私はあなたを惜しまなかった。
基本的に、プログラムはキーストロークを待つために永久にターミナルに座る必要があります。最初のキーストロークの後、次のキーストロークを非常に短い時間(この場合は1/10秒)待つ必要があります。その短時間にキーストロークが登録されていない場合は、出力(sedコマンドでパイプ処理されます)をエコーし、再起動します。
これは、4文字または100文字をスキャンできるバーコードスキャナーで使用することを目的としています。データをできるだけ早く処理したいのです。つまり、何かがスキャンされてから1秒遅れる必要はありません。
キャラクターを受け取ったときに「charXX」を作成できれば、良い解決策になります。助けてくれてありがとう。