我应该先说我以前从未使用过 shell 脚本,所以这对我来说是全新的。我能够做出一些有用的东西,但是优化得非常厉害,我不知道如何改进它。如果有的话,这是一个非常搞笑的脚本:
#/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”。谢谢你的帮助。