2016-06-28 15 views
1

bashの、非ブロックSTDIN /コンソール入力

while no_user_key_pressed 
{ 
    do_something.... 
} 

のようなものC++、Javaの、ncursesベースおよびその他のO/Sの特定を使用して、いくつかのオプションがあります。私は単純なbashポータブル関数が欲しいです。

^c割り込みを使用して残りのコードを強制終了する必要があります。残りのコードを殺さない方法ではCtrl-Cトラップすることができます

+2

正確に何を達成したいですか? – cb0

+1

'^ C'の何が問題なのですか?私はそれを使用しているすべての時間は間違っていたと言っているのですか? ';)'。 –

+1

'INT'(" interrupt ")シグナルを捕まえるシグナルハンドラをインストールしてください。これは、[信号を知っている]すべてのプログラミング言語に適用されます。 – Kusalananda

答えて

1

あなたは​​に小さなタイムアウトを使用することができます。

欠点は、ユーザーが "any key"ではなく、< RETURN>を押す必要があることです。例えば

:バッシュ3.2(OSのX)でテスト

while ! read -t 0.01 
do 
    echo -en "$(date)\r" 
done 
echo "User pressed: $REPLY" 

!タイムアウトが満了した場合readが失敗(false)を返すためです。

+0

テスト済み。最新のLinuxバージョンで正常に動作し、2.6.18-410で失敗します。 「Press return to continue」は十分だと思います。 – fcm

1

「を押してテストを停止するには、任意のキーを」:のようなものを想像してみて

$ cat test.sh 
#!/usr/bin/env bash 

trap 'break' INT 

while true 
do 
    date 
    sleep 1 
done 

echo done 
$ ./test.sh 
Tue 28 Jun 12:01:22 UTC 2016 
Tue 28 Jun 12:01:23 UTC 2016 
Tue 28 Jun 12:01:24 UTC 2016 
^Cdone 
+0

優れた代替手段。^C以外のオプションが利用可能でない限り、これは受け入れられる答えです。 – fcm

関連する問題