我正在尝试创建一个脚本来启动第二个计数器。 [但后来我也要添加分钟]但是到目前为止,它只是一遍又一遍地回显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
答案 0 :(得分:2)
&
使它在子shell中运行,这意味着它有一组独立于当前脚本的环境变量。找到另一种方式(或其他语言)来做到这一点。
答案 1 :(得分: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