2011-07-07 26 views
1

我想製作一個腳本來啓動第二個計數器。 [但後來我想添加分鐘],但到目前爲止,它只是一直保持回顯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的答案解釋了你的子shell的環境對你的父進程是不可見的。

創建這樣的從站的一種方法是協同處理(使用coproc,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

&使得它在一個子shell,這意味着它有自己的一套環境變量獨立於當前的腳本的運行。找到另一種方式(或另一種語言)來做到這一點。