是否可以预先评估 bash 的 PS1 中的值?

2023-11-30

我正在尝试构建一个 Bash 提示符,其中包含我的 git 分支信息(使用 git 的 bash-completion 中的 __git_ps1 )和一个小彩色笑脸来指示最近运行的命令是否成功。

笑脸是使用这种技术创建的,我在这里找到了这样的技术:

SMILEY="${GREEN}:)${COLOR_NONE}"
FROWNY="${RED}:(${COLOR_NONE}"
STATUS_EMOTICON="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

这是我想使用的提示行:

export PS1="[\t]${RED}[\u@$MACHINE:${BOLD_CYAN}\w${GREEN}\$(__git_ps1 ' %s')${RED}]${COLOR_NONE} \`${STATUS_EMOTICON}\`\n$ "

不幸的是,看起来由 __git_ps1 运行的程序覆盖了$?值,即使在跑步之后,我最终每个表情符号都是绿色笑脸false.

取出 __git_ps1 调用...

export PS1="[\t]${RED}[\u@$MACHINE:${BOLD_CYAN}\w${RED}]${COLOR_NONE} \`${STATUS_EMOTICON}\`\n$ "

...使表情符号正常工作。

所以我显然需要做的是评估${STATUS_EMOTICON} before跑步__git_ps1,但包括评估值after __git_ps1的输出。那可能吗?


不要放$(cmd) or `cmd`直接在你的PS1。相反,使用 Bash 的PROMPT_COMMAND变种我通常做的是定义一个函数_PS1_cmd并设置PROMPT_COMMAND=_PS1_cmd。然后在_PS1_cmd,我设置了我想包含的杂项变量PS1。例如:

THE-OLD-PROMPT # cat prompt.rc
function _PS1_cmd()
{
    local saveExit=$?

    # This non-zero exit will not affect $? on command line
    g_git_ps1=$( echo TESTING; exit 1 )
    if (( saveExit )); then
        g_smiley=':('
    else
        g_smiley=':)'
    fi

    # Seems like this is not necessary, at least with bash 4.2.37. But
    # to be safe, always return it.
    return $saveExit
}

PROMPT_COMMAND=_PS1_cmd
PS1='$g_git_ps1 $g_smiley '
THE-OLD-PROMPT # source ./prompt.rc
TESTING :) ( exit 123 )
TESTING :( echo $?
123
TESTING :) echo $?
0
TESTING :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以预先评估 bash 的 PS1 中的值? 的相关文章

  • Gitolite 与 LDAP 不工作

    我是 gitolite 的新手 我正在尝试用 gitolite 进行一个非常简单的测试 我已经设置了名为 test repo 的存储库 请注意 除了下面所述之外 我没有修改任何其他内容 我可以在 gitweb 中看到这个仓库 这是仓库配置
  • 使用 git filter-branch 然后 git push --force 清除大文件后,远程(Gitlab)上的 Git 存储库大小仍然很大

    我已按照 Gitlab 文档中有关 使用 Git 减少存储库大小 的说明进行操作 通过从历史记录中清除大文件 https docs gitlab com ee user project repository reducing the rep
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • “检测到堆栈粉碎”消息打印到哪个流?

    考虑以下非常基本的程序 它在此处以多种形式出现在其他问题上 include
  • Git:如何维护项目的两个分支并仅合并共享数据?

    假设我有一个项目的两个分支 IMClient MacOS 和 IMClient Windows 它们的代码仅 比方说 一个目录 main 有所不同 所有其他目录都包含与系统无关的代码并且可以互换 有些工作人员在 Windows 版本上工作
  • 如何将 git-svn 与 svn+ssh url 一起使用

    我喜欢在cygwin中使用git svn clone使用我们公司 svn 存储库的命令 这个的网址是svn ssh svn
  • Bash 字符串之间的比较 - 相等但不相等

    我只想在 Bash 中的两个字符串之间进行非常简单的比较 stat curl Is url head n 1 echo stat if stat HTTP 1 1 200 OK then echo symbol is OK echo sta
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • 无法从另一台计算机访问 git 分支

    基本上我看不到另一台计算机上的分支 我跑 git branch a 在家用电脑上我得到 C learn ror sample app filling in layout gt git branch a filling in layout m
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • BASH 中的空函数

    我正在使用 FPM 工具创建 deb 包 此工具在从支持的文件中删除包之前 之后创建 不幸的是FPM生成的bash脚本包含这样的函数 dummy 该脚本退出时出现错误 语法错误 意外 BASH 不允许空函数吗 哪个版本的 bash linu
  • 使用 IFS bash 进行 CSV 解析:选择“;”作为分隔符

    我有一个包含 130 列的 CSV 我需要用它来做 3 个 csv 我用 while 和 IFS 循环 因为我需要对每一行的变量进行一些处理 这是我所做的 while IFS read my 130 vars what i do with
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • 如何在没有本地存储库的情况下在远程运行 git 命令

    我有一个名为 git export 的脚本 它可以帮助我导出远程存储库 它是这样运行的 git export http host com git repo lt t tag or b branch or c commit gt local
  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • git 的精简包是什么?

    我还没有找到太多关于瘦包的信息 并且手册页的信息对此相当含糊 我知道这与连接速度慢有关 但是什么是 连接速度慢 它的优点和缺点是什么 什么时候应该使用它 什么时候不应该使用它 根据记录 手册页 index pack https www gi
  • 独特的 Linux 文件名,可按时间排序

    以前我用的是uuidgen http man7 org linux man pages man1 uuidgen 1 html创建唯一的文件名 然后我需要通过 bash 脚本按日期 时间迭代该文件名 从那时起 我发现简单地通过 ls l 循
  • 如何将一个文件存储库上传到 Gist,并保留历史记录?

    我的计算机上有一个包含单个文件的 Git 存储库coins py 我如何才能将其作为 Github 上的要点来保存历史 这其实很简单 您可以将现有历史记录移动到 Gist 存储库中 就像将其移动到任何其他存储库中一样 创建要点 只需输入一些
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签

随机推荐

  • 如何让Python中的字符串重复出现

    如何使字符串重复自身 例如 而不是写作print 我该怎么做print 60 你之前是so close gt gt gt print 60 你需要乘以str value not的返回值print 功能
  • 防止requestAnimationFrame一直运行

    我想知道如何致电animate功能通过requestAnimationFrame仅当确实需要时 目前animate我猜一直被调用会产生开销 我已经在我的内部尝试过animate比较函数targetRadius和最初的radius一旦它们相同
  • Git 说有变化但实际上没有

    首先 我无法放弃对文件的更改 我会使用git reset hard 没有错误 但更改仍然存在 我尝试了其他 StackOverflow 文章中的一些建议 git rm gitattributes git add A git reset ha
  • 是否可以连接两个或多个 WiFi Direct 组?

    我目前正在为我正在进行的一个项目尝试 WiFi Direct WiFiP2p 并想知道是否可以在组之间创建桥梁 从而将它们连接在一起 基于白皮书由 WiFi 联盟发布 这应该是可能的 尽管 P2P 规范没有描述此功能的机制 实施是特定于供应
  • 无法推送到 Bitbucket 上的 Git 存储库

    我创建了一个新的存储库 但遇到了一个奇怪的错误 我以前在 Bitbucket 上使用过 Git 但我刚刚重新格式化 现在似乎无法让 Git 工作 提交后 我必须将我的电子邮件和姓名添加到全局变量中 但随后它就正常提交了 当我尝试使用该命令时
  • Android - 配置 Spinner 使用数组

    我通过以下方式声明我的 Spinner 它非常静态 所以我 有 2 个字符串数组array xml对于标题和值
  • 如何每 30 秒清空 Guava 缓存,同时将其发送到另一个方法?

    我通过调用从多个线程填充我的番石榴缓存add方法 现在 从每 30 秒运行一次的后台线程中 我想将缓存中的所有内容发送到sendToDB原子方法 下面是我的代码 public class Example private final Sche
  • 向多维数组添加元素

    如果我像这样定义一个多维javascript数组 var myStack new Array 3 edit var myStack 一次插入一个值的最佳方法是什么 myStack 1 1 0 myValue 我想读取数据库并一次写入一个值
  • python中的逆正态随机数生成?

    我过去曾使用 random normal 来生成一个数字 如果多次调用该数字 总计将创建一个钟形曲线分布 我现在想做的是创建相反 逆的分布 其中分布偏向某个范围内的极端 excel中有一些内置函数似乎可以满足我的要求 有没有办法在 pyth
  • Date.parse() 在 IE 8 中不起作用

    功能简单Date parse 工作不顺利互联网浏览器 8 我在用Date parse 验证日期格式 MM DD YYYY isNaN Date parse 99 99 9999 return true 日期无效 isNaN Date par
  • 导出/导入 OWASP ZAP 被动扫描规则

    有没有办法为被动扫描创建扫描策略 我知道您可以为主动 攻击扫描创建和修改扫描策略 但我想知道您是否可以对被动扫描规则执行相同的操作 或者是否必须在每台计算机上单独修改它们 有一个现有的票证可以在单一策略类型界面中统一主动 被动扫描处理 ht
  • 服务器端 Flash 功能测试

    我正在开发一个 ASP NET 网站 需要支持非 Flash 用户 如果用户的浏览器不支持 Flash 或者禁用了 Flash 我想将大的启动图像下载到浏览器 但是我不想浪费带宽来下载它 如果 Flashdoes正确渲染 那么是否可以使用
  • 从另一个 Glassfish(Web-Container)访问另一个 Glassfish(EJB-Container)中运行的远程 EJB

    我想使用两台独立的服务器 一台用于 Web 容器 一台用于 ejb 容器 这两个容器都是 Glassfish V3 但是 如何在我的 Web 项目中使用 EJB 注释来访问远程 ejb container 的 ejb 在 Ejb 2 0 中
  • 在终端上切换 GitHub 帐户时遇到问题

    自从我将任何东西推送到 GitHub 以来已经有一段时间了 我最初在计算机上设置了帐户 一切运行良好 然后我将我的帐户更改为客户的帐户 这样我就可以将代码推送到他们的私人存储库 已经有一段时间了 现在我要改回旧帐户 但遇到了麻烦 我生成了一
  • 当上游有事件时,为什么有一个可用的“事件”变量而没有定义?

    我今天偶然发现了一个奇怪的行为 基本上 我有一个绑定到 knockout js 单击事件的函数 该函数利用了淘汰事件 但没有明确将其作为参数 this myClickHandler function console log event ev
  • 从子字符串中包含特定字符的字符串中提取单词

    在 MS Excel 中 我想使用公式从文本中包含特定字符 的单元格中仅提取单词 A2 多莉给我做了一个自制的蛋糕和一些松饼 A3 晚餐我们吃了奶酪 蛋糕 A4 每个人都喜欢面包店制作的美味 蛋糕 A5 约翰尼昨晚自己做了晚餐 然后打扫了厨
  • xlink 的 jQuery 选择器

    a xlink href coastline attr class grey a xlink href onshore attr class blue light 这就是我目前必须选择具有 xlink 的每个项目 coastline然后把它
  • 有没有办法很好地去除标签?

    有没有办法隐藏这个标签栏 附 不确定这个问题是否属于 stackoverflow 好的 我自己通过编写 VS 扩展来完成此操作 还将标题栏和菜单栏切换为自动隐藏 现在我的 VS 终于有了一个简约的视图 GitHub VS画廊
  • 如何在字典中打印换行符?

    我正在尝试通过字典创建一个查询 如下所示 Name name ID id Date of Birth dob 第二name是用户通过 raw input 输入的预设值 同样对于id和dob 这是我当前的代码 students id nNam
  • 是否可以预先评估 bash 的 PS1 中的值?

    我正在尝试构建一个 Bash 提示符 其中包含我的 git 分支信息 使用 git 的 bash completion 中的 git ps1 和一个小彩色笑脸来指示最近运行的命令是否成功 笑脸是使用这种技术创建的 我在这里找到了这样的技术