我已經手動建立並安裝了一個新軟體(從遠端 git 儲存庫)。每次我想使用它時,我都會運行類似的東西,
. /path/to/setup_software.sh
但我希望每次登入帳戶時都會自動發生這種情況,而不是手動執行。我嘗試將上面的命令放入我的.bashrc
文件中,以便每次打開核心時都會獲取安裝檔。之後一切都很順利,我很高興。我唯一的小(非常小)問題是,當我打開內核後,它會列印一些日誌訊息,整個採購需要一些時間(我不喜歡這樣:D)。無論如何,我假設有一個更簡潔的解決方案,也許將我的安裝資料夾移到自動運行安裝檔的地方;任何幫助將不勝感激。
答案1
將source
(或.
) 指令放在啟動檔案以外的檔案中.bashrc
不會對執行時間有任何幫助。您可以放置啟動,/etc/profile.d
但延遲將是相同的。至於日誌訊息,請嘗試以下操作.bashrc
. /path/to/setup_software.sh >/dev/null 2>&1
您將看不到日誌訊息。您也不會看到任何突然出現的錯誤。
答案2
您只需將其放入~/.bash_profile
,因為這就是您的 shell 在登入時執行的操作;問題:如果您沒有登入 shell(例如,因為您使用圖形介面登入),那麼它就不會運行。
備註:這是三個單獨的答案之一;分離是有意的。
答案3
如果您知道您的腳本僅設定以下內容兩個都
- 環境變量,而不是新的 shell 函數,
- 永遠不要更改(例如,不依賴時間、日期或您可能更新的內容的版本號),
然後您可以簡單地「模擬」腳本的作用:它將設定一些環境變數。
那麼,如何比較運行腳本之前和之後的環境變數呢?diff
非常擅長比較文字檔。
您可以使用set
為您提供環境變數(在設定 posix 選項之後。
您可以使用它來建立一個臨時檔案來保存子 shell 中運行<(...)
的結果。set
所以,把所有這些放在一起:
$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)
會告訴你
33a34
> FOO=BAR
FOO=BAR
您可以將其讀作「第二個輸出中存在一行,而不是第一個輸出」。
你可以運行
$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)
找出您的安裝腳本在環境中發生了什麼變化。你需要一個人腦來解釋這一點——有些事情是無關緊要的,有些是腳本對你的系統實際所做的事情,有影響。
然後您可以在您的中添加所有更改的變量~/.bashrc
,例如
export FOO=BAR
備註:這是三個單獨的答案之一;分離是有意的。
答案4
這聽起來很危險,就像你嘗試太多一樣!您只需新增一個別名來取得腳本,然後啟動您的軟體:
alias startit=". /path/to/setup_software.sh; run_software"
然後打電話startit
。
如果它不僅僅是一個命令,則可能是您正在尋找諸如進入cd
特定資料夾時自動啟動環境之類的命令。
direnv
幾乎可以讓你做到這一點。當然,它並沒有解決獲取腳本需要時間的問題 - 但它只在您進入特定目錄時執行一次,而不是在同一 shell 之後執行一次。
備註:這是三個單獨的答案之一;分離是有意的。