AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1287178
Accepted
new User
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 1 个回答
  • 215 Views

1 个回答

  • Voted
  1. 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 查看输出动画:asciiccast

    此示例的硬编码刷新率为 5 秒。您可以添加参数解析或仅更改硬编码延迟以满足您的需要。此示例在运行提供的任何命令之前执行零输入验证。您的安全蜘蛛侠意识应该非常刺痛。不要将此示例与共享系统上的任何类型的提升权限一起使用。

    • 3

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve