bash提示:正在输入高亮命令

时间:2019-02-17 08:31:38

标签: bash prompt

在bash上输入命令如下:

<dict>
    <key>CFBundleTypeName</key>
    <string>Markdown Document</string>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>md</string>
        <string>mdown</string>
        <string>markdown</string>
        <string>text</string>
    </array>
    <key>LSItemContentTypes</key>
    <array>
        <string>net.daringfireball.markdown</string>
    </array>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleTypeIconFile</key>
    <string>net-daringfireball-markdown</string>
</dict>

我正在寻找一种使<Prompt $> <The Command I Entered> <Output Of The Command> 粗体的方法。 通过将The Command I Entered放入PS1,很容易从提示符处开始。

但是问题是,如何按下tput boldtput sgr0。 我可以使用readline / bash魔术来做到这一点吗?

2 个答案:

答案 0 :(得分:2)

Pre Bash 4.4:

在bash 4.3.x(可能更早)中,在执行来自命令行的命令之前,会执行“调试陷阱”。

trap 'tput sgr0' DEBUG

但这有一个缺点:它在执行每个简单命令之前执行。因此,如果您运行:

$ echo Hello && echo World 

调试陷阱被调用两次。

然后以下命令将不能正常运行:

tput setaf 1 ; echo "This is red"

打印的“这是红色”不会是红色。

请参阅DEBUG trap and PROMPT_COMMAND in Bash以及对this question的公认答案。

Bash 4.4

在Bash 4.4中,引入了变量$PS0。这是man page的引文:

  

此参数的值被展开(请参见下面的“提示”)   并在阅读命令后由交互式外壳显示   并且在执行命令之前。

因此,使用bash 4.4,您可以执行以下操作:

PS0="\[$(tput sgr0)\]"

\[\]用于包含不可打印的字符(此处是用于重置文本属性的终端控制序列)。我不确定PS0是否真的需要这样做,但这不会造成伤害。两种方式的外壳输出都没有视觉差异。

答案 1 :(得分:0)

要扩展Ralf's answer以使bash 4.4 + 中的命令加粗,需要像这样设置copy_n(istream_iterator<char>(cin), n, a.begin()); PS1:< / p>

PS0

很显然,您可能不喜欢我无聊的提示,但是它以粗体显示命令为您提供了一个起点。 PS1="\[\e[32m\]\u@\h \t \W \\$\[\e[0;30;1m\] " PS0="\[$(tput sgr0)\]" 将命令设置为以黑色文本和粗体显示。其他color choices可能更适合您。

使用asciinema捕获文档示例时,我发现这很方便。它使我想起O'Reilly style,其中包括带有粗体命令的UNIX控制台示例。