BASH: 终端如何设置为闪烁?

5
我想让BASH终端闪烁。目标是使用标准的Linux工具,在白色和黑色两种颜色之间使终端大幅闪烁。为了实现这一目标,可以填充终端并清除终端内容。以下是此效果的示意图:

如果您不关心屏幕是否被填充和清除,那么只需按照此方法操作,并适当地切换字体和背景颜色即可。您只需要使用正确的转义序列。http://www.arwin.net/tech/bash.php - Rambo Ramon
通常情况下,程序使用ncurses库来实现这种行为,并且可以在其输出中执行此操作,我不知道是否有工具可以在bash中本地执行此操作。 - Klaus
1
如果有一个程序每小时做这个超过一次,我永远不会使用它。珍视他们的眼睛的人也不会使用它。 - msw
@msw 是的,但提醒某人可能是一个不错的功能。顺便说一下,如果这是你想要实现的功能,你可以使用 notify-send,它会更加简洁。 - Klaus
@msw 我想知道这个的两个目的。第一个是为了清晰地突出大量开放终端中的活动。第二个是作为一种通过计算机显示器视觉算法编码来传输二进制数据的方式。 - d3pd
4个回答

11

您可以使用以下 shell 命令在普通模式和反相模式之间切换视频:

printf '\e[?5h'  # Turn on reverse video
printf '\e[?5l'  # Turn on normal video

1
吹毛求疵:这取决于终端仿真。现在几乎每个仿真器都支持这个ANSI代码,但以前有很多其他终端,只需查看terminfo数据库即可... 但你是对的,这就是OP所要求的 :-) - Serge Ballesta
1
是的,我正在研究正确使用 terminfotermcap 的方法(我甚至记不清哪一个是现代数据库,哪一个已经过时了),但是无法快速找到它,所以我就放弃了。(这些都是 ANSI 转义字符,因此大多数常见终端应该都支持它们。) - chepner
1
terminfo是年轻的,termcap是70年代的老祖宗。我记得TeleVideo终端不认识ANSI序列。唉,也许我还能在博物馆里找到一个... - Serge Ballesta
@SergeBallesta 感谢您的启发性评论。我正在使用 GNOME 终端和 xterm,它们都是相当标准的,并且可以识别 ANSI 代码。 - d3pd
我还发现这个解决方案在 tmux 会话中不起作用。 - Jasha
显示剩余3条评论

5

这是我用于此目的的一个小型 bash 脚本。它还可以在您按下 ctrl-c 时重置终端。

#!/usr/bin/env bash
set -e

trap ctrl_c INT

function ctrl_c() {
    printf '\e[?5l'
}

while true; do
    printf '\e[?5h'
    sleep 0.5
    printf '\e[?5l'
    sleep 0.5
done

1
你所询问的被称为可见铃声。它可以在像xterm(Ctrl+中键菜单)或putty(设置/终端/铃声)这样的主要终端仿真器上启用。不幸的是,没有通用的方法可以做到这一点。
但一旦完成了,echo Ctrl+G会使终端闪烁而不是响铃。

1
可见的响铃只是闪烁的一个应用程序;我认为OP想知道如何实际告诉终端如何闪烁。 - chepner
1
这会触发终端响铃,终端可能会(取决于设置)使用闪烁来显示。但是,无论是否设置可见铃声,什么是导致闪烁的实际终端命令? - chepner
@SergeBallesta 感谢您对可见铃的详细评论。chepner提供的解决方案更直接,但是您的解决方案在更一般的方式上提供了有益的信息。 - d3pd

1
您可以在Bash中内联调用Python,方法如下:
 python -c 'import curses ; w=curses.initscr() ; curses.flash() ; curses.endwin() '

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接