在bash PS1中设置变量

雅各布·汤姆林森

我正在尝试自定义bash提示,但遇到一些条件问题。

我目前的情况PS1是这样的。

export PS1="\
$PS1USERCOLOR\u\
$COLOR_WHITE@\
$COLOR_GREEN\h\
$COLOR_WHITE:\
$COLOR_YELLOW\W\
\`if type parse_git_branch > /dev/null 2>&1; then parse_git_branch; fi\`\
\`if [ \$? = 0 ]; then echo -e '$COLOR_WHITE'; else echo -e '$COLOR_RED'; fi\`\$\     
$COLOR_WHITE"
  • 前6行只是设置常规PS1内容。

  • 第7行然后调用一个函数以显示当前的git分支和状态(如果适用)。

  • 然后,第8行测试前一个命令的返回码,并$在最后更改的颜色

  • 第9行将提示重新设置为白色,以供用户执行命令。

但是,第8行正在响应第7行的功能返回的代码,而不是我最初期望的先前命令。

我已经试过将8号线移到7号线之前,并进行适当的传送。但是我不希望第7行在第7行之前,它$必须在最后。

我试过早些时候将变量设置为的值,$?然后像这样测试该变量

export PS1="\
\`RETURN=\$?\`\
$PS1USERCOLOR\u\
$COLOR_WHITE@\
$COLOR_GREEN\h\
$COLOR_WHITE:\
$COLOR_YELLOW\W\
\`if type parse_git_branch > /dev/null 2>&1; then parse_git_branch; fi\`\
\`if [ \$RETURN = 0 ]; then echo -e '$COLOR_WHITE'; else echo -e '$COLOR_RED'; fi\`\$\     
$COLOR_WHITE"

但这是行不通的。

有人知道如何解决我的问题吗?

切普纳

正确的方法是这样使用PROMPT_COMMAND

prompt_cmd () {
    LAST_STATUS=$?
    PS1="$PS1USERCOLOR\u"
    PS1+="$COLOR_WHITE@"
    PS1+="$COLOR_GREEN\h"
    PS1+="$COLOR_WHITE:"
    PS1+="$COLOR_YELLOW\W"
    if type parse_git_branch > /dev/null 2>&1; then
        PS1+=$(parse_git_branch)
    fi
    if [[ $LAST_STATUS = 0 ]]; then
        PS1+="$COLOR_WHITE"
    else
        PS1+="$COLOR_RED"
    fi
    PS1+='\$'
    PS1+="$COLOR_WHITE"
}

由于PROMPT_COMMAND是在每个提示之前进行评估的,因此您只需执行代码即可PS1为每个提示实例设置所需的方式,而不是尝试将延迟逻辑嵌入字符串本身。

一些注意事项:

  1. $?在覆盖所需的值之前,必须保存在代码的第一行。
  2. 我的大多数步骤都使用双引号,除了\$;。PS1+="\\\$"如果愿意,可以使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从bash $ PS1设置变量

来自分类Dev

如何从bash $ PS1设置变量

来自分类Dev

bash $ PS1变量中的参数

来自分类Dev

bash PS1设置

来自分类Dev

如何在PS1变量中插入bash脚本

来自分类Dev

Bash PS1不评估变量

来自分类Dev

如何设置使git和conda都能在bash中显示的PS1?

来自分类Dev

更新bash函数中的变量并在提示符(PS1)中使用它

来自分类Dev

导出或不导出bash PS1变量

来自分类Dev

为什么bash的提示变量称为PS1?

来自分类Dev

Bash + Korn的PS1

来自分类Dev

在bash_profile中添加到PS1

来自分类Dev

在bash PS1中使用\ r

来自分类Dev

PS1中的Bash命令(历史)编号

来自分类Dev

Bash $ PS1在MAC终端中崩溃

来自分类Dev

Bash提示特殊字符未在PS1中扩展

来自分类Dev

BASH:如何将退出代码保存在PS1中以便以后在PS1中使用?

来自分类Dev

Bash $ PS1麻烦(ubuntu)

来自分类Dev

bash PS1 256色加粗

来自分类Dev

在bash函数中生成PS1

来自分类Dev

为什么手动设置bash提示(PS1)会导致root使用$而不是#?

来自分类Dev

Bash:PS1 vs Prompt 命令来设置提示和标题

来自分类Dev

在bash的PS1中的用户名中更改特定字母的颜色

来自分类Dev

bash $ PS1中的颜色代码在tmux中不起作用

来自分类Dev

在Bash提示PS1中将元音更改为数字

来自分类Dev

Bash-如何在PS1中缩短用户名

来自分类Dev

在Bash PS1中嵌入命令时出现问题

来自分类Dev

Bash在Ubuntu中默认PS1的主要部分是什么意思?

来自分类Dev

为什么我不能在bash登录外壳中更改PS1?