2012-12-28 117 views
0

我想編寫一個C程序將一個字符串附加到PATH環境變量。 像 「出口PATH = $ PATH:$ HOME/MYLIB」setenv()更新PATH環境變量

我有這樣

SETENV C代碼( 「PATH」, 「$ PATH:$ HOME/mylib中」,1); //這是行不通的。

其他工作arround我以爲是使用getenv()獲取PATH和HOME並在堆中創建一個內存,然後使用strcat()追加它們。

我可能需要在代碼中多次更新PATH:所以這是一個令人厭煩的過程。

有沒有其他的選擇?

謝謝

+0

的好消息是,你已經克ot'setenv()';如果你有'putenv()',生活會更難 - 你幾乎不可避免地會泄漏記憶。 –

+0

我創建了一個在其他問題中使用setenv的例子。請參閱https://stackoverflow.com/a/46400175/5842403 – Joniale

回答

1

不,沒有別的選擇。你必須建立文字字符串並將其傳遞給setenv。

1

沒有其他選擇立即可用。如果你需要做幾次,你可以編寫一個單獨的函數來處理這個問題。

2

$FOO語法擴展爲名稱爲FOO的環境變量的值是shell的一個功能;它不是在C.

直接可用

您的系統可以提供wordexp()功能,讓您在C.

類似的功能,但因爲你只是擴大兩個環境變量有固定名稱("HOME""PATH")使用便攜式getenv()函數和一些字符串處理更有意義。 (您可以考慮使用sprintfsnprintf而非strcat

注意:如果你只使用更新後的$PATH內部在你的程序,你可以停止閱讀這裏。

希望您不希望在程序運行完畢後在命令行上提供$PATH的任何更改。您運行的C程序很可能是交互式shell的子進程。環境變量由子進程繼承;他們不會傳播回父母程序。

如果這就是你想要做什麼,你可以讓你的程序打印新PATH值到標準輸出,然後有殼評價它:

PATH=`your-program` 

或者,它可以打印指令(S )設置一個或多個環境變量:

eval `your-program` 

(在bash中,你可以使用$(your-program)以及`your-program`