我使用如下的shell脚本来获取部分粗体的字符串,并在终端中生成正确的字符串:
bold=$(tput bold)
normal=$(tput sgr0)
str="${bold}ERROR${normal} detail text"
echo -e "$str"
它不能与mail
命令一起使用:
echo -e "$str" | mail -s "daily notification" 123@abc.com
我收到一封邮件“[1mERROR”,但不是“ ERROR ”,有人知道为什么吗?
答案 0 :(得分:3)
普通ASCII(又名text/plain
)中没有“粗体文本”这样的概念,这是mail
及其近亲mailx
等传统客户端发送的概念。如果你撰写text/enriched
(从未真正起飞)或其他结构化格式,如text/html
,text/rtf
等,那么该工具可用,但实现它的格式代码肯定不会是您使用tput
生成的终端控件序列。目前,最简单的方法可能是用HTML撰写邮件,并使用可以正确设置Content-Type:
标题的客户端来反映这一点。 (mailx
的某些变体显然有这个,但有许多不兼容的变体没有。)
因此,以下可能有效(来源:https://stackoverflow.com/a/27693507/874188),如果您很幸运并且拥有兼容的mailx
版本:
echo '<html><body><p>Test <b>bold</b> text</p></body></html>' |
mailx -a 'Content-Type: text/html' -s "Daily notification" 123@example.com
如果有一种通用格式化语言可以适应和扩展各种形状因素的终端,打印和图形显示的设施和惯例,那将是很好的;在不同的时间,Unix roff
,TeX,PostScript(仍然是PDF的核心)和微软的RTF已经显示出一些希望,但他们都没有做到。目前,在我简陋的估计中,HTML是这一领域最有力的竞争者,但仍然不存在。
与此同时,一些现代图形电子邮件客户端将*bold*
显示为粗体,_italics_
显示为斜体,即使在纯文本邮件中也是如此;甚至没有看到这个图形标记的用户通常也能理解和欣赏这些约定。