at 命令本身是一个用于在未来指定时间执行一次性任务的命令,它本身不直接包含 ring 这个子命令,但 ring 通常与 at 结合使用,特别是在一些系统(如 Solaris 或其衍生系统)中,用于在任务执行时发出声音提醒。

at ring 的作用是:在 at 指定的任务执行时,让终端发出铃声,以提醒用户。
at 命令基础回顾
我们快速回顾一下 at 命令的基本用法:
# 在明天上午9点执行一个脚本 at 9:00 AM tomorrow # 在10分钟后执行一个命令 at now + 10 minutes # 在今晚11点执行一个简单的echo命令 at 23:00 > echo "任务执行完毕!" # 输入要执行的命令 > <Ctrl+D> # 结束输入
当任务执行时,at 会将命令的输出(包括标准输出和标准错误)通过电子邮件发送给当前用户,但用户可能正在电脑前工作,不一定注意到新邮件。
at ring 的作用与用法
at ring 是 at 命令的一个修饰符,它告诉 at 在执行任务时,除了正常的操作外,还要在用户的终端上产生一个铃声。

语法
at [时间] ring
工作原理
当你使用 at ring 时,at 在执行你的任务之前,会先向你的终端发送一个响铃字符(ASCII 码为 0x07,通常表示为 \a),这个字符在大多数终端模拟器中都会被解释为“响铃”或“哔”的一声。
示例
假设你想在下午3点整让系统提醒你喝杯水,并发出声音。
# 使用 at ring 设置一个带提醒的任务 at 3:00 PM ring > echo "该喝水了!休息一下吧!" > <Ctrl+D>
当下午3点整到来时:
- 你的终端会发出一声“哔!”的铃声。
- 紧接着,终端上会打印出
该喝水了!休息一下吧!这条信息(如果是在前台运行的终端)。
at ring 与 mail 的对比
| 特性 | at (默认) |
at ring |
|---|---|---|
| 提醒方式 | 将命令输出通过 Email 发送给用户。 | 在用户的当前终端上发出声音,并打印输出。 |
| 适用场景 | 适用于服务器后台任务,用户不常在终端前的情况。 | 适用于用户在桌面前工作,需要即时、非侵入性提醒的场景。 |
| 依赖 | 需要系统邮件服务(如 sendmail, postfix)正常工作。 |
只需要终端模拟器支持响铃字符(绝大多数都支持)。 |
| 优点 | 可靠,即使用户关闭了终端,邮件也能被接收。 | 即时反馈,无需检查邮件。 |
| 缺点 | 用户可能不会及时查看邮件。 | 如果用户静音了终端或不在电脑前,则无效。 |
跨平台兼容性
重要提示: at ring 语法并非所有 Linux 发行版都默认支持。

- 支持的平台:这个语法在 Solaris 和一些基于它的系统(如 illumos)中非常常见和标准。
- 常见的 Linux 发行版 (如 Ubuntu, CentOS, Debian):标准的
at包通常不包含ring修饰符,在这些系统上直接使用at ring会报错,at: illegal argument: ring。
在普通 Linux 上如何实现类似功能?
如果你想在标准的 Linux 系统上实现 at ring 的效果(即执行任务时发出声音),可以在 at 命令中直接执行一个能发声的命令。
使用 echo -e "\a"
\a 是响铃字符的转义序列。
# 在5分钟后执行一个带声音提醒的任务 at now + 5 minutes > echo -e "\a" # 发出铃声 > echo "5分钟时间到了!" > <Ctrl+D>
使用 printf
printf 对转义字符的支持更明确。
at now + 5 minutes > printf "\a" # 发出铃声 > echo "5分钟时间到了!" > <Ctrl+D>
使用系统声音播放器
如果你的系统安装了声音播放器(如 paplay, aplay),可以播放一个声音文件。
# 需要 pulseaudio-utils at now + 5 minutes > paplay /usr/share/sounds/freedesktop/stereo/complete.oga > echo "任务完成!" > <Ctrl+D>
at ring是一个方便的语法,用于在at任务执行时发出声音提醒。- 它主要在 Solaris 系统上可用,并非标准 Linux 的
at命令的一部分。 - 在标准 Linux 上,你可以通过在
at任务中执行echo -e "\a"或printf "\a"来达到相同的效果。 at ring提供了一种比等待邮件更即时、更直接的提醒方式,非常适合在桌面环境中使用。
