我使用 aws cfn 啟動 ubuntu 實例,並且需要將 cfn 啟動腳本中提供的變數傳遞給實例上的腳本。例如,我可能會傳遞“db-server=db-2.domain.com”,並且在實例上有許多腳本想要知道該位址。
目前,我在 /etc/profile.d 中建立一個文件,設定 vars with export
,但這僅在 bash 作為登入 shell 啟動時才有效,這需要我採取額外的操作才能使這些變數無所不在。
所以我想也許我可以在 /usr/local/bin 中建立文件,例如get-db-host.sh
使用echo "db-2.domain.com"
as 內容,這樣它們就可以用於每個腳本而無需更改。
這是一個好方法嗎?
答案1
這是一個好方法嗎?
我很確定你所說的所有腳本都是 shell 腳本。在這種情況下,您可以將所有變數放入設定檔中:
db-server=db-2.domain.com
將其放置在標準位置(例如,/usr/local/etc/myapp/
)並將其來源到其他腳本中:
. /usr/local/etc/myapp
/etc
顯然,您也可以使用普通的。
答案2
推薦的方法是將變數加到/etc/environment
.該文件在登入時讀取(從Ubuntu 文件):
影響整個系統(而不僅僅是特定使用者)的環境變數設定不應放置在載入系統或桌面會話時執行的許多系統級腳本中的任何一個中,而應放置在
/etc/environment - 此檔案專門用於系統範圍的環境變數設定。它不是一個腳本文件,而是由每行一個賦值表達式組成。具體來說,該檔案儲存系統範圍的區域設定和路徑設定。
所以,只需編輯/etc/environment/
並添加
db-server=db-2.domain.com
答案3
我會對這個想法說不。該目錄/usr/local/bin
適用於本地的可執行文件,而不是任何特定包的一部分(通常)。
不要讓它成為你正在做的一些神秘的設置,而是將變數放在對可能需要執行你的任務的其他人來說顯而易見的地方。
我將它們放在您$HOME
目錄中的一個文件中,然後只需從您的$HOME/.bashrc
.
例子
if [ -f $HOME/.my_aws_env ]; then
. $HOME/.my_aws_env
fi
或者你也可以很酷很時髦,用一句話完成:
[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env