![](/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.