gpt4 book ai didi

Bash $PS1 麻烦(ubuntu)

转载 作者:行者123 更新时间:2023-12-04 18:36:51 26 4
gpt4 key购买 nike

所以我的 .bashrc 中有一个脚本用于自定义我的提示(见下文)。

function git_unpushed {
brinfo=$(git branch -v)
if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
then
echo "Not Pushed: ${BASH_REMATCH[2]}"
fi
}

function git_untracked {
untracked=$(git clean --dry-run | wc -l)
if [ $untracked -gt 0 ]
then
echo "Untracked: "$untracked
fi
}

export PS1="\
$(
# last_result=$?
uid="$(id -u)"
host="\[\e[97m\]\H"
path="\[\e[94m\]\w"

# If root
if [ "$uid" = "0" ];
then
user="\[\e[95m\]\u"
symbol="\[\e[97m\]#"
else
# If not root
user="\[\e[96m\]\u"
symbol="\[\e[97m\]\$"
fi

# If Git Repo
if [ -d './.git' ];
then
unpushed=$(git_unpushed)
untracked=$(git_untracked)
branch=$(__git_ps1)
status=$(git diff --shortstat)
second_line="hi"
else
second_line=$path
fi

echo "\[\e[1m\]$user@$host\n$second_line\n$symbol: \[\e[0m\]"
)"
我的问题:为什么每当我 cd 时路径都不会被替换到 git 仓库? (如果我在 repo 中启动 bash 提示符,它会这样做”
我正在使用 Ubuntu 14.04

更新:
经过大量工作使其恰到好处,他是我的结果: Custom $PS1
感谢所有帮助过的人!

最佳答案

编辑:

@EtanReisner 指出,您的代码应该通过将您的命令替换用单引号括起来,为所有用户按预期工作。

    export PS1='\
$(
# last_result=$?
uid="$(id -u)"
host="\[\e[97m\]\H"
path="\[\e[94m\]\w"

# If root
if [ "$uid" = "0" ];
then
user="\[\e[95m\]\u"
symbol="\[\e[97m\]#"
else
# If not root
user="\[\e[96m\]\u"
symbol="\[\e[97m\]\$"
fi

# If Git Repo
if [ -d "./.git" ];
then
unpushed=$(git_unpushed)
untracked=$(git_untracked)
branch=$(__git_ps1)
status=$(git diff --shortstat)
second_line="hi"
else
second_line=$path
fi

echo "\[\e[1m\]$user@$host\n$second_line\n$symbol: \[\e[0m\]"
)'

老答案:

这是因为你想要发生的只是每次你的 ~/.bashrc 被获取时运行。要让它在您执行每个命令后运行,您可以创建一个函数并设置环境变量 PROMPT_COMMAND到那个功能。

尝试这个:
new_ps1 (){
export PS1="\
$(
# last_result=$?
uid="$(id -u)"
host="\[\e[97m\]\H"
path="\[\e[94m\]\w"

# If root
if [ "$uid" = "0" ];
then
user="\[\e[95m\]\u"
symbol="\[\e[97m\]#"
else
# If not root
user="\[\e[96m\]\u"
symbol="\[\e[97m\]\$"
fi

# If Git Repo
if [ -d './.git' ];
then
unpushed=$(git_unpushed)
untracked=$(git_untracked)
branch=$(__git_ps1)
status=$(git diff --shortstat)
second_line="hi"
else
second_line=$path
fi

echo "\[\e[1m\]$user@$host\n$second_line\n$symbol: \[\e[0m\]"
)"
}
PROMPT_COMMAND="new_ps1"

关于Bash $PS1 麻烦(ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276576/

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