一千萬個為什麽

搜索

如何獲得shell模式來正確處理我的PS1,這涉及用戶定義的函數調用?

我的bash_profile包含一些用於構建提示的函數。這是一個超級簡化版本,我用它來嘗試調試問題:

custom_git_function() {
  echo "git"
}

build_custom_prompt() {
  export PS1="\u:\W \$(custom_git_function) >"
}

build_custom_prompt

當我在emacs中運行shell模式時,它似乎可以訪問 build_custom_prompt ,但不能訪問 custom_git_function

bash: custom_git_function: command not found

什麽是解決這個問題的幹凈方法?

最佳答案

.bash_profile 中定義的變量或函數由登錄shell加載,不適用於通過窗口管理器啟動的程序。另一方面, .bashrc 在您打開shell時運行,包括Emacs shell-mode。因此,如果將函數定義移動到 .bashrc ,您應該能夠從Emacs中看到它。

通常,您的登錄shell .bash_profile 將包含以下內容:

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

這將在 .bashrc 中獲取所有內容,因此 .bashrc 中的任何內容也會被登錄shell加載。

轉載註明原文: 如何獲得shell模式來正確處理我的PS1,這涉及用戶定義的函數調用?