【问题标题】:In a bash script/command how can I make a PC beep noise, or play a sound file?在 bash 脚本/命令中,如何使 PC 发出哔声或播放声音文件?
【发布时间】:2010-11-11 17:14:36
【问题描述】:

我有一些长时间运行的脚本需要输入/交互才能继续,但是当我切换到另一个窗口时,我希望(通过声音)通知任务已完成,现在正在等待输入。

我希望能够播放音频剪辑(*.mp3、*.ogg 等),但我不在乎唯一的解决方案是否是让 PC 扬声器发出哔声。

有什么想法吗?我对任何可以安装播放声音的 CLI 实用程序持开放态度,而我可以在需要时执行这些实用程序。

仅供参考:我的系统正在运行 WinXP Pro。

更新: 哇!我的 Windows > 控制面板 > 声音 > 默认哔声:设置为 (none)。呜呜呜……

问题解决了。

【问题讨论】:

  • 在 Windows 10 上这对我有用:start wmplayer "C:\Windows\Media\Alarm10.wav" && timeout 5 && taskkill /im wmplayer.exe
  • 这是 Windows 还是 Linux?您指定 Windows,还指定 bash?
  • @Lazerbeak12345 这是在 Windows 上运行的 cygwin bash(当时是 XP,现在是 Win10/Win11)

标签: shell audio


【解决方案1】:

spd-say

sleep 2; spd-say 'get back to work'

如果您需要额外的动力,请使用-w 进行无限循环:

sleep 2; while true; do spd-say -w 'get back to work'; done

或者如果你更喜欢胡萝卜:

sleep 2; while true; do spd-say -t female1 -w "I'm done, come back to me, darling"; done

通过包speech-dispatcherhttp://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest 预装在 Ubuntu 14.04 上,我猜是盲人?

另见:https://askubuntu.com/questions/277215/how-to-make-a-sound-once-a-process-is-complete

还添加一个弹出窗口

这个组合是救命稻草,b 代表beep

b() ( spd-say 'done'; zenity --info --text "$(date);$(pwd)" & )

然后:

super-slow-command;b

如果我在房间里的某个地方,我会听到它并且知道漫长的工作已经完成。

否则,当我回到我的计算机时,我会看到弹出窗口。

相关:How to show a GUI message box from a bash script in linux?

听你的冷却器

我当然是在开玩笑,但在编译时我注意到我经常下意识地使用这个队列。当冷却器停止嗡嗡声一会,就意味着编译结束了!

【讨论】:

  • 我猜你在这里指的是 Ubuntu 平台,链接和版本号似乎证实了这一点。 OP 最初没有提到任何特定平台,但现在问题是 Windows XP(原文如此)。这些东西在系统之间有所不同;在 macOS 上,默认安装命令行语音合成器 say;在许多其他系统上,您可能需要找到具有不同名称的包。我听说espeak 在 Linux 上很受欢迎。
【解决方案2】:

我知道您的问题是针对 Window 的,但只是将这个问题放在这里以供遇到本文的任何 Mac OSX 用户使用。 OSX 10+ 自带say 命令:

say "I'm done"

例如:

sleep 5 && say "I'm done waiting 5 seconds"

【讨论】:

    【解决方案3】:

    在我的 bash 配置文件中,我使用上面的 @GregReynolds 解决方案向脚本添加了一个 BEEP,然后将其添加到 PS1

    GREEN="\[\033[0;32m\]"
    BEEP=$(echo -en "\007")
    export PS1="$GREEN : ${BEEP}"
    

    source ~/.bash_profile - 命令提示符返回后您应该会听到哔声

    我通常有 git-autocomplete,所以我在上面提供了一个非常简化的版本

    【讨论】:

      【解决方案4】:

      要从 Windows 命令行播放系统声音,您可以运行:

      rundll32 user32.dll,MessageBeep
      

      它应该适用于所有版本的 Windows。

      【讨论】:

      • 还有这个rundll32.exe cmdext.dll,MessageBeepStub
      【解决方案5】:

      通过如下设置这个变量

      PROMPT_COMMAND="echo -en '\a'"

      然后 bash 每次显示提示时都会发出哔哔声。当你不再需要它时,

      unset PROMPT_COMMAND

      【讨论】:

        【解决方案6】:

        复制 con beep.bat [Enter]

        @echo off [回车]

        回显 [Ctrl+G] [Enter]

        [Ctrl+Z] [回车]

        beep.bat [回车]

        【讨论】:

        • 仅供参考:Notepad.exe 不喜欢 ctrl-g,所以当我用记事本编辑此文件并保存时,它不再发出哔哔声。很可能是 ASCII 与 Unicode 问题。然后,我使用 Notepad++ 编辑通过键入上述命令创建的文件,效果很好。
        【解决方案7】:

        试试这个:

        回声 ^G

        (^G 由 ctrl+G 获得).

        注意:您不能将此代码复制并粘贴到批处理文件中,它不会起作用。要获取文件中的 ^G 字符,请在 cmd 窗口中键入:

        回声 ^G > beep.txt

        (同样,^G 是通过 ctrl+G 获得的)。

        然后你会有一个名为 beep.txt 的文件,用记事本打开它,会有一个方形字符。这是我们保存在文件中的^G。

        然后您可以将其复制并粘贴到批处理文件中以发出声音(不要忘记在其前面加上“echo”)。

        【讨论】:

        • 我们说的是 .bat 或 .cmd 文件,对吧?你说你运行的是 windows XP,但你说的是一个“bash”脚本,它是一个 linux 命令解释器。
        • 可能是我猜的任何东西... *.sh、别名、*.bat 或 *.cmd。我应该澄清一下,我目前正在运行一个别名......它呼应了一堆运行 *.sh 脚本的调用。所以我可以把“声音”放在里面的任何地方。
        • 在大多数 shell(但不是命令/cmd)中,您需要 Ctrl-V Ctrl-G 才能键入 ^G。
        • 您可以按住“Alt”键,然后在键盘右侧输入“7”生成“^G”。这简化了这个答案的过程。
        • 这对我有用,但是,我必须暂停一下,否则速度太快了,听起来什么都没有。如何替换暂停?更新:使用 TIMEOUT 命令 2 秒,它工作:D
        【解决方案8】:

        这将在 bash 中发出哔声

        echo -en "\007"
        

        【讨论】:

        • 稍微简单的替代方案:echo -ne '\a'printf '\a'。另请注意,在某些 Linux 发行版(例如 Ubuntu)中,铃声可能会被抑制 - 请参阅 askubuntu.com/questions/19906/beep-in-shell-script-not-working
        • 在 Cygwin 中,您必须在终端选项中启用哔声。
        • 在我的 clearOS 服务器中,我在 bash 脚本中使用 echo -en "\a" > /dev/console
        • 如果问题是针对 Windows XP,你为什么要给出这个只适用于 Linux 的答案?
        • 较短的printf \\a
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多