如何在啟動時設定環境變數(透過腳本)?

如何在啟動時設定環境變數(透過腳本)?

我想在 Ubuntu 機器(10.04)上設定幾個環境變數(在啟動時),但我想透過腳本建立它們的值,就像:

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • 我想這樣做的原因是用於設定環境變數的命令需要很長時間才能執行(10秒左右),所以這就是為什麼我只想在啟動後執行一次。不管怎樣,目前我透過在啟動時快取命令的結果來解決這個問題,這樣後續的呼叫就會很快,因此不使用 env。變數。

我嘗試過設置/etc/environment,但只能逐字複製 rhs

我嘗試在啟動時執行腳本/etc/init.d/,但這似乎不起作用。

有想法嗎?

答案1

若要設定啟動時可用的系統範圍環境變量,請將它們放置在/etc/environment.該文件不是腳本文件,而是由賦值表達式組成,每行一個。像這樣:

SYSTEM_FOO=barnone

筆記: 變數擴充在 /etc/environment 中不起作用。

原始訊息來自幫助.ubuntu.com

答案2

將其放入~/.bash_profile~/.bashrc

gedit ~/.bashrc

如果您需要在非互動式 shell(腳本)中使用這些變量,請使用 .bash_profile;如果您要在 shell 中設定變量,請使用 ~/.bashrc。

如果這不起作用,我們需要更多詳細信息,特別是您設置了哪些變數以及目的是什麼?

答案3

雖然這可能不是一個好的做法,但您可以將環境變數指定為核心參數。 Linux 核心文件有一些很好的資訊(重要段落加粗):

參數列表

內核命令列被解析為由空格分隔的字串(引導參數)列表。大多數引導參數的形式如下:

 name[=value_1][,value_2]...[,value_10]

其中「name」是一個唯一的關鍵字,用於識別要向核心的哪個部分提供關聯值(如果有)。請注意,10 個限制是真實的,因為目前程式碼僅處理每個關鍵字 10 個逗號分隔的參數。 (但是,在異常複雜的情況下,您可以重複使用相同的關鍵字以及最多 10 個附加參數,> 假設設定函數支援它。)

大部分排序都在核心來源檔案 init/main.c 中進行編碼。首先,核心檢查參數是否為特殊參數「root=」、「nfsroot=」、「nfsaddrs=」、「ro」、「rw」、「debug」或「init」中的任何一個。這些特殊參數的意義如下所述。

然後,它會遍歷設定函數列表,以查看指定的參數字串(例如“foo”)是否已與特定裝置或內核部分的設定函數(“foo_setup()”)關聯。如果您向核心傳遞了 foo=3,4,5,6 行,那麼核心將搜尋 bootsetups 陣列以查看「foo」是否已註冊。如果是,那麼它將呼叫與「foo」相關的設定函數 (foo_setup()) 並將內核命令列上給出的參數 3、4、5 和 6 傳遞給它。

任何不被接受為上述設定函數的“foo=bar”形式的內容都會被解釋為要設定的環境變數。
一個(無用?)範例是使用“TERM=vt100”作為啟動參數。

任何未被核心取得且未被解釋為環境變數的剩餘參數都會傳遞到 PID 1,通常是 init(1) 程式。傳遞給 init 進程的最常見參數是“single”一詞,它指示它以單一用戶模式啟動計算機,而不是啟動所有常用的守護程序。檢查系統上安裝的 init(1) 版本的手冊頁,以了解它接受哪些參數。

AskUbuntu 的答案有一些關於如何修改核心啟動參數的很好的說明。

答案4

將您的命令放入/etc/rc.local.請務必閱讀頭部的評論。

相關內容