26

我在下面有这段代码:

echo " \033[33mTitle of the Program\033[0m"

将颜色变为黄色。

如何使文本“程序标题”闪烁?

4

6 回答 6

40

-e如果没有它就无法工作,请尝试添加

您可能需要添加-e选项echo(至少在我使用的所有或大多数系统上都需要)。以下将告诉您的系统闪烁文本:

echo  -e "\033[5mTitle of the Program\033[0m"

你可以有闪烁颜色

而且您不必选择黄色闪烁。你可以吃蛋糕也可以吃:

echo  -e "\033[33;5mTitle of the Program\033[0m"

一些系统忽略闪烁代码

您的系统可能会忽略闪烁代码——这似乎很常见。如果你想让文本突出,但闪烁被忽略,你可以用 反转颜色7

echo  -e "\033[33;7mTitle of the Program\033[0m"

或者您可以使用闪烁反转颜色(和黄色):

echo  -e "\033[33;5;7mTitle of the Program\033[0m"
于 2014-07-29T14:09:12.177 回答
13

是否可以使闪烁工作取决于终端仿真器。系统本身无关紧要

问题中给出的示例很接近,只需要更改转义序列即可与任何POSIX shell “工作” :

echo  "\033[33;5mTitle of the Program\033[0m"

建议是不需要的-e(它是bashism,非标准,通常不需要)。7将(反向)更改为5(闪烁)可以满足要求。

而不是硬编码转义,您可以使用tput,例如,

printf '%s%s%s%s' "$(tput setaf 3)" "$(tput blink)" "Title of the Program" "$(tput sgr0)"

对于相同的效果,有两个不同之处:

  • 该表达式可以说更具可读性,
  • 实际上使用已知的终端功能,但是
  • 假设您使用的是合适的终端描述,即$TERM.

例如,VTE(用于各种皮肤的库,如 gnome-terminal)不支持闪烁(并且可以在各种错误报告中找到其开发人员对该主题的意见)。使用infocmp来显示相应的终端能力表明,加上一些其他的区别:

$ infocmp vte xterm
comparing vte to xterm.
    comparing booleans.
        km: F:T.
        mc5i: F:T.
        npc: F:T.
    comparing numbers.
    comparing strings.
        blink: NULL, '\E[5m'.
        cnorm: '\E[?25h', '\E[?12l\E[?25h'.
        cvvis: NULL, '\E[?12;25h'.
        enacs: '\E)0', NULL.
        is2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
        kb2: '\E[E', '\EOE'.
        kfnd: '\E[1~', NULL.
        kslt: '\E[4~', NULL.
        mc0: NULL, '\E[i'.
        mc4: NULL, '\E[4i'.
        mc5: NULL, '\E[5i'.
        rep: NULL, '%p1%c\E[%p2%{1}%-%db'.
        rmacs: '^O', '\E(B'.
        rmcup: '\E[2J\E[?47l\E8', '\E[?1049l'.
        rmm: NULL, '\E[?1034l'.
        rs2: '\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h', '\E[!p\E[?3;4l\E[4l\E>'.
        setb: NULL, '\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m'.
        setf: NULL, '\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m'.
        sgr: '\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;', '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'.
        sgr0: '\E[0m\017', '\E(B\E[m'.
        smacs: '^N', '\E(0'.
        smcup: '\E7\E[?47h', '\E[?1049h'.
        smm: NULL, '\E[?1034h'.

如果您碰巧使用 KDE konsole,则差异会更长(尽管konsole碰巧支持blink)。

于 2017-08-11T11:45:41.393 回答
3

只需使用printf而不是echo

printf "\e[6;33mTitle of the Program\e[0m"

Title of the Program此行以黄色闪烁的文本打印。

于 2021-05-26T12:59:40.973 回答
2

使 bash 脚本中的行闪烁的一个小工作

for (( i=0;i<=3;i++))
do
#Below line will deleted the before printed line
echo -en "\033[1A"
echo -en "EmpNo:$empno already exists\n";
sleep 0.4s;
#Below line to print a blank line
echo -en "\033[1A"
echo -en "                                                            \n";                                                                         
sleep 0.2s;
done
echo -en "\033[2A"
echo -en "                                                            \n";
echo -en "\033[1A"
echo -en "Enter the empno       : "; read empno1;
于 2018-05-21T14:25:20.903 回答
1

据我所知,它的意思是:

echo " \033[5mTitle of the Program\033[0m"

唯一的变化是标题前的33m被5m代替了。参见Ansi 转义码

请注意,某些系统会过滤掉闪烁,因为它真的很烦人。你的旅费可能会改变。

于 2013-07-03T04:10:25.107 回答
0
  1. 导出变量
export YELLOWIT="\e[1;3;5;43m"
export NC="\e[0m"
  1. 用于echo获得所需的效果
echo -e "\n${YELLOWIT}### RESTORE FROM USB - Firefox Bookmarks ###${NC}\n"
于 2021-06-15T13:16:12.170 回答