2012-08-27 114 views
0

我定義了一個環境變量: export NBR_PROCESS=2如何在Linux中更新Env變量?

基本上我應該可以更新變量,但是當我執行下面的腳本,我得到每次運行相同的結果:

#!/bin/bash 
echo "Script 2: Before decrement : $NBR_PROCESS" 
export NBR_PROCESS=$(($NBR_PROCESS - 1)) 
echo "Script 2: After decrement : $NBR_PROCESS" 

上每次執行我得到同樣的結果如下:

Script 2: Before decrement : 2 
Script 2: After decrement : 1 

我想要做的是運行腳本遞減變量NBR_PROCESS。

任何想法我在這裏錯過了嗎?謝謝 !

回答

2

腳本(或任何可執行文件)不能更改shell的環境變量,因爲它運行在不同的(子)進程中。改變內部環境的唯一方法是通過內建的export。你也可以使用env命令來設置環境的一些程序,如env YOURVAR=1 yourprogram yourarguments ......

你可以使用bash的功能或evalsource建宏(間接調用export內置)。

閱讀advanced bash scripting guide

2

您運行腳本每一次,它得到你的(它是被作爲執行或用戶)環境變量的全新副本 - 他們留在本地這一進程。換句話說,無論修改哪些變量,都只針對該實例進行修改。

如果進程創建子進程,則是相同的事情。孩子們會收到家長環境的副本,他們所做的任何更改在他們退出時都會「消失」。

正如Luc M所述,您可以使用source將您的腳本作爲Tlc進程執行。這將允許所述腳本的內容也影響您的環境。

4

你有 「源」

your_script


編輯1
this answer...


EDIT 2

. filename [arguments]source filename [arguments]

Complete explanations:

讀取和在當前 外殼上下文執行從文件名參數的命令。如果文件名不包含斜線,則使用PATH變量 來查找文件名。當Bash不處於POSIX模式時,如果在$ PATH中找不到文件名,將搜索當前的 目錄。如果提供了任何 參數,則在執行 文件名時,它們將成爲位置參數。否則,位置參數是 不變。返回狀態是執行的最後一個命令 的退出狀態,如果沒有執行命令,返回狀態爲零。如果文件名不是 找不到或無法讀取,則返回狀態爲非零。內置的 相當於源代碼。

+1

或者使用'.'(dot)命令。 –