首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化PS1的生成

优化PS1的生成
EN

Unix & Linux用户
提问于 2022-11-15 16:53:29
回答 1查看 51关注 0票数 0

我非常喜欢快速计算的自定义PS1变量。因此,我在我的Bash-脚本中有一行,通过

代码语言:javascript
复制
PROMPT_COMMAND='PS1="$(/home/username/.config/bash/ps1 ${PWD})"'

在这里,ps1是我自己在当前工作目录PWD下获取PS1的可执行文件。

在这个设置中点击enter,会出现一个没有提示的新行(我主要注意到这一点,因为光标位于行的开头)。这在常规的sh中很少发生。

让我们假设我总是站在同一个目录中,简单地按住enter,这样相同的进程就会被一次又一次地运行。然后,我仍然看到光标在行的开头。然而,hyperfine

代码语言:javascript
复制
~/.c/bash $ hyperfine -N --warmup=1000 "/home/username/.config/bash/ps1 $PWD"
Benchmark 1: /home/username/.config/bash/ps1 /home/username/.config/bash
  Time (mean ± σ):       0.5 ms ±   0.1 ms    [User: 0.4 ms, System: 0.0 ms]
  Range (min … max):     0.4 ms …   2.1 ms    5335 runs

因此,在60 Hz的计算机屏幕上(即每帧之间~16 ms ),提示符几乎是瞬间产生的,而空行很少被绘制。

为什么即使可执行文件非常快,也会发生这种情况?从结果中可以看出,可执行文件是非常优化的,但是它确实包含了一些fopen和一两个freadfclose,以及一个printf

我能更快地生成/打印PS1吗?如果可以,怎么做?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-04-02 18:01:43

我确实解决了这个问题。我下载了Bash的源代码,并将/home/username/.config/bash/ps1的源代码合并到Bash源代码中。关键是改变static void execute_prompt_command()eval.c中的函数。您可能需要学习Bash的一些内部特性,但是我在下载源代码后15分钟就完成了。例如,我不得不通过pwd = get_string_value("PWD")获得PWD,而不是从argv获得它。它按照预期工作,并且燃烧得很快!

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/725003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档