BASH-自定义PS1以运行命令

西蒙

我想修改我的PS1以每次都运行一些命令。假设我想要它,以便如果最后执行的命令成功执行,它将在PS1的末尾添加一个绿色的微笑,否则该微笑应为红色。
我将其提取为一个函数:

function exit_smile {

    EXITSTATUS="$?"
    RED="\[\e[1;31m\]"
    GREEN="\[\e[32;1m\]"

    if [ "${EXITSTATUS}" -eq 0 ]
    then
       SMILE="${GREEN}:)"
    else
       SMILE="${RED}:("
    fi

    echo -n "$SMILE"
}

然后尝试使用` exit_smile`(由反引号包围)和\$(exit_smile)修改PS1变量时都尝试过,但是在修改PS1或打印文字\[\e...\]而不是颜色时会执行一次
例如

PROMPT="\u@\h \W"
PS1="${PROMPT} \$ \$(exit_smile) ${OFF}\n"

username@hostname ~ $ \[\e[32;1m\]:)
我我想念的东西吗?

伊尔卡楚

我不确定版本(*)之间是否已更改,但是我在Bash的手册页中说

Bash允许通过插入许多反斜杠转义的特殊字符来自定义这些提示字符串,这些特殊字符的解码方式如下:

(列表中包含\e\[\]等)

的字符串被解码,则通过参数扩展,命令替换扩大,...

这意味着\[..\]不能来自命令替换,而必须在命令替换之前存在。

(这也意味着您可以使用\u\w作为命令替换的参数,并且它们将在命令运行之前被替换。而且我不知道将\[..\]命令替换放入其中会做什么...换种说法更有意义大约。)

因此,我们必须将颜色代码放在单独的扩展中,并\[..\]用手保护它们我将使用变量代替命令替换,并使用$'...'扩展来获得ESC字符:

prompt_smile() {
        if [ "$?" = 0 ] ; then
                smile=' :) '
                smilecolor=$'\e[1;32m'
        else
                smile=' :( '
                smilecolor=$'\e[1;31m'
        fi
        normalcolor=$'\e[0m'
}

PROMPT_COMMAND=prompt_smile
PS1='\u@\h \W \$ \[$smilecolor\]$smile\[$normalcolor\]\n'

(*我想知道的原因是,对较旧且相似但又没有那么重复的问题的答案似乎是\[..\]从扩展中输出的

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义PS1提示时Bash覆盖第一行

来自分类Dev

如何自定义电力线段(特别是针对Bash shell $ PS1布局)?

来自分类Dev

自定义Bash提示(也称为PS1环境变量)的最佳实践是什么?

来自分类Dev

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

来自分类Dev

bash PS1设置

来自分类Dev

Bash + Korn的PS1

来自分类Dev

如何自定义Bash命令完成?

来自分类Dev

捕获所有 bash 命令作为自定义运行程序的参数

来自分类Dev

在 bash 脚本中的自定义 shell 实例中运行命令

来自分类Dev

如何从bash $ PS1设置变量

来自分类Dev

Bash $ PS1麻烦(ubuntu)

来自分类Dev

在bash PS1中设置变量

来自分类Dev

bash PS1 256色加粗

来自分类Dev

如何从bash $ PS1设置变量

来自分类Dev

Bash PS1不评估变量

来自分类Dev

bash $ PS1变量中的参数

来自分类Dev

在bash函数中生成PS1

来自分类Dev

如何在$ 1和$ 2的bash脚本中包含自定义命令选项?

来自分类Dev

Bash PS1:换行问题与来自外部命令的非打印字符

来自分类Dev

当msys bash上包含换行符时,PS1命令替换失败

来自分类Dev

如何停止bash shell PS1颜色在命令结束时停止?

来自分类Dev

如何停止bash shell PS1颜色在命令结束时停止?

来自分类Dev

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

来自分类Dev

制作一个bash PS1来计数“正确”命令的连胜

来自分类Dev

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

来自分类Dev

如何缩短自定义的PS1提示?

来自分类Dev

Ubuntu .bashrc自定义PS1表现奇怪

来自分类Dev

bash命令行中的自定义readline函数?

来自分类Dev

从自定义Vim命令向bash传递参数