2011-07-07 11 views
1

私は、2番目のカウンターを開始するスクリプトを作ろうとしています。 [しかし、後で私は分を追加したい]しかし、今のところ、それは0,0,0,0を繰り返しエコーしている。 :\なぜこのタイマーは機能しませんか?

#!/bin/bash 
seconds=0; 
count() 
{ 
export seconds=$[seconds + 1] 
sleep 1; 

count 
} 

count& 
N=$! 
trap "kill $N; exit 0;" 2 


while true; do 
    echo $seconds 
    sleep 1; 
done 

答えて

1

Ignacioの答えは、あなたのサブシェルの環境があなたの親プロセスに見えないことを説明しています。

このようなスレーブを作成する1つの方法は、のzshで、より新しいbashで、または特殊な構文を使用してkshで共プロセスです。あなたのbashはおそらくこれをまだサポートしていません。

ここでは、信号を使用して更新情報を親に送信する、あなたのアイデアのバリエーションです。私はそれが矛盾しないあなたの基本的な構造を保持しています:

count() { 
    parent=$1 
    kill -ALRM $parent 
    sleep 1 
    count $parent 
} 

trap 'seconds=$[$seconds + 1]' ALRM 

count $$ & 
trap "kill $!; exit 0" INT 

while true 
do 
    echo $seconds 
done 
+0

ああ。ニース、それは動作します。 – Matt

2

&は、それが現在のスクリプトの独立した環境変数の独自のセットを持っていることを意味しサブシェルで実行します。これを行う別の方法(または別の言語)を探します。

関連する問題