簡體   English   中英

在c函數中導出的環境變量是否在父shell中可用?

[英]whether the environment variable exported in c function will be available in parent shell?

我正在編寫一個外殼程序,在該外殼程序上我調用ac函數,並在其中導出變量。 在下面的例子中

my_test.c
int main()
{
   setenv("MY_NAME","kk_rathor",1);
   // get and print MY_NAME works here 
}

my_test_Sh.sh  
#!bin/sh
test
echo $MY_NAME // does not works here 

我在打印$ MY_NAME時得不到我的名字,但是如果我在shell中導出任何內容,我可以在test.c上得到它。

從test.c導出的變量的作用域僅在該函數中。 如果不是,那我在做什么錯?

謝謝,如果問題不清楚,請告訴我。

環境變量是當前進程的本地變量,並在創建時傳播(=復制)到進程。 當您在C程序中設置MY_NAME ,僅在其過程中對其進行了設置,因此無法將其傳播到父級(即shell)。

如果要向外殼提供一些數據,請在標准輸出上寫入。

閱讀有關getenv(3)setenv(3)putenv(3)的信息

但是環境變量(實際上,整個虛擬地址空間和進程狀態)對於它們的進程是本地的(例如,您的Shell),並且對其進行更改不會影響其他進程中的變量(除了通過fork(2)獲得的未來子進程之外)。 因此,在子進程中更改環境變量-或任何其他內存位置, 工作目錄文件描述符等...不會影響其父進程(或任何其他現有的進程)。 另請參見fork(2)execve(2)

你應該考慮其它類型的進程間通信 ,如管道(7) -s或插座(7) -S(也許shm_overview(7)sem_overview(7) )。 您可能希望在poll(2)之上有一些事件循環

閱讀intro(2)syscalls(2)ALP之類的書。

順便說一句,大多數現有的Unix shell免費軟件 因此,您可以下載並研究其源代碼。 您可以strace(1)他們。 另請參見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM