gpt4 book ai didi

bash - 用于终端提示的基本 bash 脚本

转载 作者:行者123 更新时间:2023-12-04 05:57:28 24 4
gpt4 key购买 nike

目前我的终端提示包括 git 信息。

示例干净目录:michaelespinosa:~/Sites/example.com [git:master]
示例脏目录:michaelespinosa:~/Sites/example.com [git:master*]

我还想为 git 信息着色(如果它干净,则为绿色,如果脏则为红色)。

我想我可以添加一个函数 (parse_git_color) 并根据是否存在星号使用 if else 语句相应地设置它的颜色。

问题在于,无论是干净目录还是脏目录,它都会一直返回绿色。我相信这个问题与比较 parse_git_dirty 的值与“*”的 if 语句 parse_git_dirty == "*"有关。

function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color {
if [ parse_git_dirty == "*" ]; then
echo '\033[0;31m\'
else
echo '\033[0;32m\'
fi
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/$(parse_git_color)[git:\1$(parse_git_dirty)]/"
}

任何帮助表示赞赏!
谢谢

最佳答案

请注意 \$(...)在 PS1 中。它是进口的,因为只有 \$()每次打印提示时都会调用您的命令。 $()仅调用一次(初始化 PS1 时)。

function parse_git_dirty
{
[[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*"
}

function parse_git_color
{
if [ "$(parse_git_dirty)" == "*" ] ; then
echo "0;31m"
else
echo "0;32m"
fi
}

function parse_git_branch
{
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git:\1$(parse_git_dirty)]/"
}

export PS1="\[\033[\$(parse_git_color)\]\$(parse_git_branch) \[\033[0m\]"

关于bash - 用于终端提示的基本 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334473/

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