vorfee's Tech Blog

Just another tech blog

シェルスクリプトで1文字だけ入力させる方法

キーボードで1文字だけ入力したら即座に入力を終了する方法。

方法

readコマンドに-kオプションをつける。

$ read -k 1

-kオプションは入力文字数を指定できるオプション。これでEnterを押さなくても入力を受け付けることができる。

使用例

ユーザーにキー入力をさせて1クッションはさむ。

$ read -k 1 key"?Press any key to proceed: "

実行結果

Press any key to proceed: 

応用例

10秒間だけキーボードからの入力を受け付ける。10秒以内に1文字でも入力されたら即時に終了する。

#!/bin/zsh
local key=''
local i

echo "10秒だけ待ってやる。"
# forとsleepを使って10秒待つ
for ((i=10; i>0; --i)); do
    echo $i
    read -s -t -k 1 key && break
    sleep 1
done

# 10秒後にキー入力がなかった場合
[[ -n $key ]] || echo "何か打てよ。"

参照

http://www.opensource.apple.com/source/zsh/zsh-30/zsh/Functions/Misc/zkbd