首页 > bash shell 里面有全局变量这个概念吗

bash shell 里面有全局变量这个概念吗

如图,shell 脚本中定义了一个变量 workdone=0,在脚本结束后设置为workdone=1

中间定义了一个在后台运行的检测函数 watchingPids, #line 50 执行后台运行。这个函数中有这样一段代码。用来检测workdone的值,当值==1时,函数退出。

但实际的执行结果却是:watingPids函数中,workdone永远都是0

    if [ ${workdone} -eq 1 ];then
        echo ${workdone}
        exit 0
    fi


有,但是
watchingPids & fork 出来了一个新的进程,而新的进程中的workdone和原本的workdone是不相关的。
你可以认为这是执行了两次这个脚本,一个脚本安装 watchingPids的流程执行,一个没有执行这句话,所以watchingPids &中的 workdone永远是0
想要实现你想要的结果可以使用信号量

#!/bin/bash 
#=============
function watch(){
#=====当收到信号时执行的命令
trap 'echo "do something";exit' 15
while true
    do
        echo "do somethings"
    done
}
#=====
watch &
watchpid=$!  # 获得后台进程pid

sleep 3
kill -15 $watchpid # 给进程发送信号量
wait ${watchpid}

【热门文章】
【热门文章】