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