在源命令后刷新bash提示符

在源命令后刷新bash提示符,bash,terminal,Bash,Terminal,我将shell脚本用于某些特定目的,它的功能之一是relad.bash_profile: 相同的.bash_配置文件有以下语句: if [ -f "$HOME/.bash_prompt" ]; then source "$HOME/.bash_prompt" fi 也应该重新加载;确实如此,提示文件包含的值应该会更改提示颜色、文本位置等的显示,但这些值不会更改。它们仅在新的终端窗口上更改,或者在终端窗口内显式调用source$HOME/.bash\u prompt时更改 我做错什么了吗

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

相同的.bash_配置文件有以下语句:

if [ -f "$HOME/.bash_prompt" ]; then
    source "$HOME/.bash_prompt"
fi
也应该重新加载;确实如此,提示文件包含的值应该会更改提示颜色、文本位置等的显示,但这些值不会更改。它们仅在新的终端窗口上更改,或者在终端窗口内显式调用source$HOME/.bash\u prompt时更改

我做错什么了吗

以下是我的.bash_提示源:


您还需要为承载刷新函数的脚本提供源代码,而不是执行它。如果不这样做,环境只会在脚本执行期间更改

说明:当您执行脚本时,它将继承其父脚本的当前环境(在本例中为您的shell),并为其提供自己的环境。脚本中的所有环境更改将仅应用于脚本本身及其子脚本

但是,在编写脚本源代码时,所有更改和命令都会直接影响父级环境

一般来说,建议将打算来源的脚本与通用脚本分开。例如,您可以拥有一个dev.sh文件,其中包含特定开发项目的特殊环境变量,该项目需要一些特殊变量


如果您想快速获取当前shell的.bash_配置文件,可以设置别名。通过执行脚本来实现这一点是不可能的。

您还需要为承载刷新功能的脚本提供源代码,而不是执行它。如果不这样做,环境只会在脚本执行期间更改

说明:当您执行脚本时,它将继承其父脚本的当前环境(在本例中为您的shell),并为其提供自己的环境。脚本中的所有环境更改将仅应用于脚本本身及其子脚本

但是,在编写脚本源代码时,所有更改和命令都会直接影响父级环境

一般来说,建议将打算来源的脚本与通用脚本分开。例如,您可以拥有一个dev.sh文件,其中包含特定开发项目的特殊环境变量,该项目需要一些特殊变量


如果您想快速获取当前shell的.bash_配置文件,可以设置别名。执行脚本是不可能的。

你能发布~/.bash_提示符的内容吗?我不能将此建议作为答案发布,但与其用催眠填充循环,不如这样做:printf-v fill%${COLUMNS};fill=${fill//-}。你能发布~/.bash_提示符的内容吗?我不能发布这个建议作为答案,但与其用hypens填充循环,不如这样做:printf-v fill%${COLUMNS};fill=${fill/-}.+1表示解决方案;然而,指出缺点也是很有用的:脚本中声明的所有函数/变量都将在shell会话中可用;此外,如果脚本包含退出行,这将破坏当前会话。@CostiCiudatu你说得对。我添加了一些额外的解释。啊,我明白了,我想我会创建一个简单的别名来刷新当前的shell。解决方案是+1;然而,指出缺点也是很有用的:脚本中声明的所有函数/变量都将在shell会话中可用;此外,如果脚本包含退出行,这将破坏当前会话。@CostiCiudatu你说得对。我添加了一些额外的解释。啊,我明白了,我想我会创建一个简单的别名来刷新当前的shell。
if [ -f "$HOME/.bash_prompt" ]; then
    source "$HOME/.bash_prompt"
fi
# 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\] "