2016-09-16 5 views
1

私はアラームとして機能するスクリプトを持っているとしましょう。あなたが5分のためにそれを設定し、それには、以下のんと言う:実行中にシェルスクリプトを一時停止する方法を教えてください。

printf '%s\n' 'Alarm set for 5 minutes' 
sleep 300 && printf '%s\n' 'Alarm!' 

どのようにキーが押されるまで待機し、その後、「P」または「SPC」と言って、継続的に一時停止キーを監視する方法を実装することができます再度スクリプトの通常の実行を再開するには?ユーザーがアラームを一時停止する方法が必要です。

編集:明確にするために、私は継続的にポーズキーを監視し、は他のコードを実行しています。これは、スティーンを聞くために実行を停止するのとは対照的です。

+1

可能な複製([Enterキーを押しますか、継続して10秒待っ] http://stackoverflow.com/questions/9483633/press-enter-or-wait-10のように行うことができます-seconds-to-continue) –

+0

これは特定の質問の複製ではありません。なぜなら、ここでは呼び出しや 'read'がないからです。 –

答えて

1

あなたはタイマーを中止するための方法として信号を送る受け入れる場合、これは簡単に行うことができます。この実装は、実際にsleepプロセスを停止せず、そのプロセスは、より多くの何かをやっている場合は、その

#!/bin/sh 

printf '%s\n' 'Alarm set for 5 minutes. ^C to continue' 
sleep 300 & 
trap : INT 
if wait; then 
    echo Timer complete 
else 
    echo Timer aborted 
fi 

注意をあなたはおそらくそれを終了させたいでしょう。 (トラップの中で何もしないで、子に信号を送る)

0

多くのシェルはstdinから読むことができるreadの組み込み関数を持っています。これを使用してプログラムをインタラクティブにすることができます。

しかし、このようなI/Oなどが必要な場合は、シェルから実際のプログラミング言語に移行する必要があります。

0

あなたは以下

// alarm running = true 
while true 
do 
    //running running is true resume or start alarm 
    /** pseudo code 
     if running == true 
      start or resume alarm 
     else 
      pause alarm 
     your alarm start or re 
    **/ 
    IFS= read -r -t 0.5 -n 1 -s holder && var="$holder" 
    if [ "$var" == "p" ] 
    then 
      #running = false 
     echo "You have pause your alarm " 
    elif [ "$var" == "R" ] 
    then 
     #running = true 
    echo "start your timer" 
    fi 
done 
関連する問題