gpt4 book ai didi

Bash 提示多个命令替换

转载 作者:行者123 更新时间:2023-12-04 03:20:20 25 4
gpt4 key购买 nike

我正在使用以下(简化的)函数在 .bashrc 中设置我的 bash 提示符:

set_prompts() {

PS1="\u@\h in \w "
PS1+="\$(get_git_repo_details)"
PS1+="\n"
PS1+="\$(exit_status_prompt)"
}

现在 exit_status_prompt 打印不同颜色的提示字符,具体取决于 $? 的值是否为 0。

但我注意到,使用上面的代码,提示字符的颜色永远不会更新。但是,如果我在附加 get_git_repo_details 的输出之前将 exit_status_prompt 的输出附加到 $PS1,或者不附加 的输出code>get_git_repo_details,然后它会更新。

有人知道是什么原因造成的吗?谢谢。

编辑:

exit_status_prompt()
{
if [ $? -ne 0 ]
then
highlight 1 "❯ "
else
highlight 2 "❯ "
fi
}

highlight 函数然后仅使用 tput 将第一个参数中指定的颜色添加到第二个参数中的字符串前。

最佳答案

set_prompts 中执行任何其他操作之前,您需要调用 exit_status_prompt,否则 $? 将被重置。据推测,exit_status_prompt 使用最近执行的命令或赋值的退出状态。

set_prompts() {
esp=$(exit_status_prompt)
PS1="\u@\h in \w "
PS1+="$(get_git_repo_details)"
PS1+="\n"
PS1+="$esp"
}

我没有对命令替换进行转义,因为我假设您正在(并且应该)将 set_prompts 作为 PROMPT_COMMAND 中的第一个命令运行。

关于Bash 提示多个命令替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38808999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com