Bel 在 PuTTY 中等待输入的时候?

Bel 在 PuTTY 中等待输入的时候?

我经常需要下载、更新和构建大型项目,因此两个命令之间会有很长的等待时间。这些项目存储和使用在 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每当启动时都会回响铃声。

相关内容