![](/img/trans.png)
[英]How to preserve the change in a variable that made in child process for parent process in a bash shell?
[英]How to use the same bash variable between a parent shell and child shell
我有一个类似于以下的bash脚本:
function test
{
running=$(( $running - 1 ))
}
running=0
test &
echo $running
因为测试功能在子shell中运行,所以它不会影响运行变量,并且我得到0回显到屏幕。 我需要子shell才能更改父shell变量,如何做到这一点? 我试过出口但无济于事。
编辑感谢所有有用的答案,我想在后台运行此功能的原因是允许同时运行多个功能。 我需要能够回调父脚本,告诉它何时完成所有功能。 我一直在使用pid来做这个,但我不想检查循环中是否有多个进程不断存在。
你不能真的。 每个shell都有一个环境副本。
但是对于您在示例中所做的事情,请尝试将此作为您的脚本:
#!/bin/bash function testSO { running=$(( $running - 1 )); return $running; }
并将其调用为:
running=$(testSO)
如果您只想有效地返回一个值,那么只需返回该函数的值即可。
使用别名而不是函数。 或者使用函数体编写脚本并使用source
执行它。
两种解决方案都避免创建子shell。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.