Bash

避免多次採購腳本

  • August 27, 2019

目前,當我在 Mac 上打開終端時,它會自動呼叫:

source ~/.bash_profile.

然而,讓我感到困惑的是,我的 shell 似乎沒有從~/.bashrcor繼承任何內容~/.profile。但這可能是典型的。

我有許多腳本可以使用sourceor繼承.;如果我把這些呼叫放進~/.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 似乎確實以正確的方式完成了這件事,請參閱這個問題:

https://youtrack.jetbrains.com/issue/WEB-31390

今天早上,我將一堆個人資訊從我的賬戶中移出,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 程式高手,所以我很想听聽別人的見解。

引用自:https://unix.stackexchange.com/questions/425757