我安装了没有 GUI 的 Gentoo,并将其附加aplay /usr/shar/sounds/startup3.wav &> /dev/null &
到我的 /etc/bash/bashrc 文件中。这在播放声音文件时工作正常,但是一旦声音播放完毕并按下回车键,它就会告诉我该过程已完成。当我让声音在前台播放时,在声音播放完毕之前,我无法在终端中执行任何操作。
有没有什么办法可以在登录后播放声音而不产生任何输出或中断?
答案1
该“完成”消息是因为 shell 仍然在对该命令进行作业控制:
$ sleep 10 &
[1] 660
$ jobs
[1]+ Running sleep 10 &
(time passes)
$
[1]+ Done sleep 10
您可以使用disown
(a)简单地从作业控制中删除所有作业
$ sleep 100 &
[1] 3804
$ jobs
[1]+ Running sleep 100 &
$ disown
$ jobs
$
我不知道如何用它的开头(b)来放弃一个作业,所以我建议你直接disown
在 bashrc 中将 a 放在 sound 命令之后。但是这会放弃所有作业——我不知道这是否是你想要的。否则你可以使用disown %aplay
。
(A)man bash
放弃 [-ar] [-h] [jobspec ...] 如果没有选项,则每个 jobspec 都会从活动作业表中删除。如果没有 jobspec,并且没有提供 -a 或 -r,则使用 shell 的当前作业概念。如果给出了 -h 选项,则不会从表中删除每个 jobspec,但会对其进行标记,以便 shell 收到 SIGHUP 时不会向该作业发送 SIGHUP。如果没有 jobspec,并且没有提供 -a 或 -r 选项,则使用当前作业。如果没有提供 jobspec,则 -a 选项表示删除或标记所有作业;没有 jobspec 参数的 -r 选项将操作限制为正在运行的作业。除非 jobspec 未指定有效作业,否则返回值为 0。
(b)然而,在 Z Shell 中zsh
这很容易:
zsh$ sleep 10 &!
zsh$ jobs
zsh$