new User Asked: 2020-10-27 10:48:04 +0800 CST2020-10-27 10:48:04 +0800 CST 2020-10-27 10:48:04 +0800 CST 有没有办法使用带有 -d 参数的“watch”,以便显示的变化具有消失的图形效果并在每次刷新时播放潜艇声音? 772 是否可以在普通终端中添加这些效果?修改终端?为了好玩而从头开始编写代码?每 3 秒播放一次声音,并在 3 秒内平滑地降低光标高亮的强度。 command-line watch-command 1 个回答 Voted Best Answer Kenny 2020-10-27T18:37:21+08:002020-10-27T18:37:21+08:00 这是一个有趣的想法。我会用那个。 不幸的是,终端不支持淡化文本或淡化反向视频。因此,您可以选择一些 ANSI 颜色来循环浏览并自己重写屏幕。这使您完全处于“从零开始编写代码以获得乐趣”的领域。 此任务可以用 Bash、Python、C 或数百种能够执行 shell 命令的其他语言中的任何一种来完成。选择您想学习或已经熟悉的语言。 假设您在 bash 或其他 shell 中工作,您可以使用play命令(来自 sox 包)播放音频。根据音频格式,还有许多其他命令行媒体播放器可供选择。 watch -d解析输出以识别更改会有点困难。大多数命令管道都喜欢使用完整的文件。从无休止的文件中检测屏幕刷新,例如 stdout from watch -d,并将其拆分为块是关键。您可能会发现将监视命令的输出存储在变量或临时文件中更容易,您可以在下次运行时对其进行比较。 这是一个如何让球在 bash 中滚动的示例: #!/bin/bash # depends on wdiff, play and cmp # sudo apt install wdiff sox diffutils # # Takes the command to watch as arguments. Example: # ./submarine-watch.sh date CMD="$@" CLEAR="\e[H\e[J" show_change() { for bg in {251..232}; do fg=$((256-(bg>244)*(bg-245)*4)) DISPLAY=$( wdiff -1y"\e[48;5;${bg};38;5;${fg}m" -z"\e[0m" \ <(echo "$OUT") <(echo "$NEWOUT") ) echo -e "${CLEAR}$DISPLAY" sleep 0.15 done echo -e "${CLEAR}$NEWOUT" } OUT=$($CMD) echo -e "${CLEAR}$OUT" while true; do sleep 5 # update interval in seconds, like watch -n NEWOUT=$($CMD) if ! cmp -s <(echo "$OUT") <(echo "$NEWOUT"); then play ~/Music/submarine.wav &>/dev/null & show_change & fi NEWOUT="$OUT" done 我们可以这样运行:./submarine-watch.sh date 查看输出动画: 此示例的硬编码刷新率为 5 秒。您可以添加参数解析或仅更改硬编码延迟以满足您的需要。此示例在运行提供的任何命令之前执行零输入验证。您的安全蜘蛛侠意识应该非常刺痛。不要将此示例与共享系统上的任何类型的提升权限一起使用。
这是一个有趣的想法。我会用那个。
不幸的是,终端不支持淡化文本或淡化反向视频。因此,您可以选择一些 ANSI 颜色来循环浏览并自己重写屏幕。这使您完全处于“从零开始编写代码以获得乐趣”的领域。
此任务可以用 Bash、Python、C 或数百种能够执行 shell 命令的其他语言中的任何一种来完成。选择您想学习或已经熟悉的语言。
假设您在 bash 或其他 shell 中工作,您可以使用
play
命令(来自 sox 包)播放音频。根据音频格式,还有许多其他命令行媒体播放器可供选择。watch -d
解析输出以识别更改会有点困难。大多数命令管道都喜欢使用完整的文件。从无休止的文件中检测屏幕刷新,例如 stdout fromwatch -d
,并将其拆分为块是关键。您可能会发现将监视命令的输出存储在变量或临时文件中更容易,您可以在下次运行时对其进行比较。这是一个如何让球在 bash 中滚动的示例:
我们可以这样运行:
./submarine-watch.sh date
查看输出动画:此示例的硬编码刷新率为 5 秒。您可以添加参数解析或仅更改硬编码延迟以满足您的需要。此示例在运行提供的任何命令之前执行零输入验证。您的安全蜘蛛侠意识应该非常刺痛。不要将此示例与共享系统上的任何类型的提升权限一起使用。