我经常需要下载、更新和构建大型项目,因此两个命令之间会有很长的等待时间。这些项目存储和使用在 Linux 机器上,我使用油灰。
寻找一种方式警觉当一个命令完成时,我继续做其他的事情。
我是不是期待以下方法,因为命令本身可能等待输入。
<command> && tput bel
谢谢。
答案1
PuTTY 不知道远程命令何时等待输入。就终端(或 SSH 客户端)而言,输入可以总是被发送。(即使试图根据显示的文本进行猜测也是徒劳的,因为许多进度显示对于计算机来说是无法与输入提示区分开的。)
考虑到您的要求,我能想到的唯一选择是一个LD_PRELOAD
库,当任何程序尝试从 tty 设备读取时,它会打印一个铃声。类似的东西:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count) {
static ssize_t (*real_read)(int fd, void *buf, size_t count);
if (isatty(fd))
write(fd, "\a", 1);
if (!real_read)
real_read = dlsym(RTLD_NEXT, "read");
return real_read(fd, buf, count);
}
(嗯,它不适用于任何静态链接的二进制文件,但是足够接近了。)
再说一次,如果一个命令等待输入,那么根据定义尚未完成,因此要求有些矛盾。
答案2
作为 90% 的解决方案,您可以告诉 shell 在命令完成时发出铃声。例如,在 bash 中,只需\a
在您的 中包含PS1
.
如果您希望在命令停止要求输入时听到铃声,非 Linux Unixen 中有一个 99% 的解决方案:按 Ctrl-Y运行命令后。由于缺乏这方面的支持,请尝试寻找特定于程序的配置。例如,在 Vim 中,您可以将norm \
其添加到.vimrc
每当启动时都会回响铃声。