1

我将 shell 脚本用于某些特定目的,它的功能是 relad .bash_profile

function refresh {
    source "$HOME/.bash_profile"
}

同样.bash_profile有这样的说法:

if [ -f "$HOME/.bash_prompt" ]; then
    source "$HOME/.bash_prompt"
fi

哪个也应该重新加载.bash_prompt;确实如此,该提示文件包含应该更改提示显示的值(颜色、文本位置等),但这些值不会改变。它们仅在新的终端窗口或我source "$HOME/.bash_prompt"在终端窗口内显式调用时才会更改。

我在这里做错了吗?

这是我的.bash_prompt来源:

# Colors
# Bunch of color codes

function print_before_the_prompt {

    # create a $fill of all screen width
    let fillsize=${COLUMNS}
    fill=""
    while [ "$fillsize" -gt "0" ]
    do
    fill="-${fill}" # fill with underscores to work on
    let fillsize=${fillsize}-1
    done

    printf "$txtrst$bakwht%s" "$fill"
    printf "\n$bldblk%s%s\n" "${PWD/$HOME/~}" "$(__git_ps1 "$txtrst [$txtblu%s$txtrst]")"

}

# Load Git completion and prompt
if [ -f "/usr/local/opt/git/etc/bash_completion.d/git-completion.bash" ]; then
    source "/usr/local/opt/git/etc/bash_completion.d/git-completion.bash"
fi
if [ -f "/usr/local/opt/git/etc/bash_completion.d/git-prompt.sh" ]; then
    source "/usr/local/opt/git/etc/bash_completion.d/git-prompt.sh"
fi

GIT_PS1_SHOWDIRTYSTATE=true
PROMPT_COMMAND=print_before_the_prompt
PS1="\[$txtred\]⦿\[$txtrst\] "
4

1 回答 1

5

您还需要获取托管refresh函数的脚本,而不是执行它。如果你不这样做,环境只会在脚本执行期间改变。

说明:当您执行脚本时,它会继承其父级的当前环境(在本例中:您的 shell),并赋予它自己的环境。脚本中的所有环境更改仅适用于脚本本身及其子项。

但是,当您获取脚本时,所有更改和命令都会直接影响父级的环境。

通常,建议将要作为来源的脚本与通用脚本分开。例如,对于dev.sh需要一些特殊变量的特定开发项目,您可以拥有一个包含特殊环境变量的文件。

如果您想快速.bash_profile获取当前 shell 的来源,可以设置别名。通过执行脚本来做到这一点是不可能的。

于 2013-01-01T14:28:12.383 回答