避免多次採購腳本
目前,當我在 Mac 上打開終端時,它會自動呼叫:
source ~/.bash_profile
.然而,讓我感到困惑的是,我的 shell 似乎沒有從
~/.bashrc
or繼承任何內容~/.profile
。但這可能是典型的。我有許多腳本可以使用
source
or繼承.
;如果我把這些呼叫放進~/.bash_profile
去,載入一個新的 shell 視窗可能需要一些時間,有時需要 3 或 4 秒,然後就會變舊。我想有一些方法可以只獲取一次這些腳本並讓我的~/.bash_profile
文件以某種方式繼承它。請注意,從我的 ~/.bash_profile 呼叫 source ~/.bashrc 或 source ~/.profile 不是我想要做的,也可能是個壞主意。這不是我想做的,因為它不能解決每個新 shell 載入緩慢的問題。
我添加了一些迴聲語句;每次我打開一個新的 bash 終端視窗時,都會記錄以下內容:
starting to load /etc/profile finished loading /etc/profile starting to load bash_profile finished loading bash_profile
這是有道理的,但令人沮喪的是——每次打開新外殼時我真的需要載入這些嗎?為什麼它不能做一些花哨的繼承,這樣我們就不必每次都重新載入所有內容?
我創建了一個影片展示問題。我有 4 個我經常使用的終端應用程序:
terminal.app # misbehaves iterm2 # misbehaves webstorm terminal emulator # misbehaves vscode terminal emulator # behaves!
VSCode 實際上以我想要的方式執行。我猜它是通過在父 shell 中載入 ~/.bash_profile 來實現的,並且只在 vscode 啟動時執行一次。應用程序中的所有終端視窗都是該父 shell 的子 shell。
希望這段影片能說明問題: https ://www.useloom.com/share/4e62f0cb24434c4a83b8bd32844b596a
這是一個合法的問題 - 大多數終端應用程序都做錯了這件事,然而,非常神奇的是,微軟的 VSCode 似乎確實以正確的方式完成了這件事,請參閱這個問題:
今天早上,我將一堆個人資訊從我的賬戶中移出,
bash_profile
並將bashrc
它們添加到我呼叫的新文件privaterc
中。在我的
privaterc
文件中,我設置了這個變數:PRIVATERC_RUN=yes
現在在我的
bash_profile
我添加了這一行:[[ $PRIVATERC_RUN != yes && -f ~/.privaterc ]] && source ~/.privaterc
這將導致
privaterc
僅在以前未在此 shell 中獲取過的情況下才進行獲取。另外,至於您所看到的配置文件怪異,我在評論中連結的文章指出了有關 mac 的以下內容:
Mac OS X——一個例外
終端視窗指南的一個例外是 Mac OS X 的 Terminal.app,它預設為每個新終端視窗執行一個登錄 shell,呼叫 .bash_profile 而不是 .bashrc。其他 GUI 終端仿真器可能會這樣做,但大多數情況下不會這樣做。
我想知道在採購方面寫一個陳詞濫調會更好,而不是採購方面。(如 C 標頭檔)
[[ "${_NAME_OF_THIS_LIBSCRIPT:-""}" == "yes" ]] && return 0 _NAME_OF_THIS_LIBSCRIPT=yes
這樣,您無需在每次獲取腳本文件時都重複相同的樣板文件,該文件應包含旨在在多個地方共享的內容。還是我錯過了什麼?說實話,我不是 bash 程式高手,所以我很想听聽別人的見解。