2015-08-09 56 views
0

我有一個創建與此代碼保存環境變量不使用/斌/慶典

memcpy(buff,"EGG=",4); 
putenv(buff); 
system("/bin/bash"); 

buff值稱爲$EGG一個環境變量來創建一個環境變量的程序,我用它通過$EGG變量,但爲了使用它,我看到我必須使用呼叫system("/bin/bash");。否則,如果我不使用/ bin/bash調用,則不會找到我的$EGG變量。

有沒有辦法在不致電/bin/bash的情況下保存我的環境變量?

回答

0

簡答:您無法以您嘗試的方式修改現有環境。

背景:您用於創建環境變量EGG的程序在啓動時(通常是作爲啓動程序的進程的環境的副本)獲取其自己的環境。在程序的自己的環境中創建EGG

當一個程序結束時,它的環境也消失了,並且它會在那裏創建。

要以編程方式修改環境,請不要編寫(C)程序,而要使用腳本。

使用bash這可能是這樣的:

#!/bin/bash 
export EGG=4 

它保存爲例如set_egg_to_4.sh並調整文件模式不能夠執行它:

$ chmod +x set_egg_to_4.sh 

然後運行該腳本:

$ ./set_egg_to_4.sh 

和測試EGG,通過做

$ echo $EGG 
4 
+0

如果我想用c programm永久保存我的環境變量。我該怎麼做? – Alex

+0

你不能。 @Alex你只能在節目的所有時間以及它的所有孩子,比如你在例子中產生的'bash'。這是一個概念問題。 – alk

+0

我明白... – Alex

0

爲「永久」設置環境變量,把它添加到您的.bash_profile文件。

export EGG=4 

該文件每次啓動一個登錄會話時間採購,使EGG添加到每次您的環境。任何從該shell中繼承(直接或間接)的環境中也會有EGG

系統上可能存在其他文件,這些文件在啓動時立即生成,因此在此類文件中設置的變量可供所有進程(不管用戶)使用。 (我想到的一個是/etc/environment。)