为什么这个计时器不起作用?

时间:2011-07-07 21:42:45

标签: bash

我正在尝试创建一个脚本来启动第二个计数器。 [但后来我也要添加分钟]但是到目前为止,它只是一遍又一遍地回显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

2 个答案:

答案 0 :(得分:2)

&使它在子shell中运行,这意味着它有一组独立于当前脚本的环境变量。找到另一种方式(或其他语言)来做到这一点。

答案 1 :(得分:1)

Ignacio的回答解释了您的子shell的环境对您的父进程不可见。

创建这样的奴隶的一种方法是协同处理(coproczsh中的bashksh中的特殊语法)。您的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