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}

以上是 bash shell 里面有全局变量这个概念吗 的全部内容, 来源链接: utcz.com/p/193539.html

回到顶部