2012-01-04 17 views
5

同じようなオプションをgetche()に入れたい。どのように私はコマンドラインから単一の文字入力を読むことができますか?シェルスクリプト内の単一文字の読み方

readコマンドを使用してコマンドを実行できますか? bashで

答えて

5

をあなたは基本的に行うことができます。bashのための

stty raw 
REPLY=$(dd bs=1 count=1 2> /dev/null) 
stty -raw 
12

readはそれを行うことができます:kshので

read -n1 ans 
+0

は、 '0403-010指定されたフラグはこのコマンドには有効ではありません。 – footy

+0

@footy、bashの組み込みreadコマンドには-nオプションがあります。どのシェルを使っていますか? –

+0

@glennjackman ksh shell – footy

7

read -n1作品を

stty rawモードが働いてからCtrl + Cキーを防止します抜け道を持たずに入力ループに詰め込まれる可能性があります。また、マニュアルページにはstty -rawが端末を同じ状態に戻すことが保証されていないと記載されています。

stty -icanon -echoを使用してdtmilano's answerを作成すると、これらの問題を回避できます。

#/bin/ksh 
## /bin/{ksh,sh,zsh,...} 

# read_char var 
read_char() { 
    stty -icanon -echo 
    eval "$1=\$(dd bs=1 count=1 2>/dev/null)" 
    stty icanon echo 
} 

read_char char 
echo "got $char" 
関連する問題