在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 bold
时tput sgr0
。
我可以使用readline / bash魔术来做到这一点吗?
答案 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控制台示例。