如何在终端文本登录提示期间显示命令的输出?

如何在终端文本登录提示期间显示命令的输出?

我有一个主要运行的无头服务器德班没有安装 xorg/图形环境。启动时它仅显示文本模式登录提示。

我想知道我怎样才能在任何用户登录之前显示命令的输出(在我的终端的登录屏幕中)?该命令的显示方式与命令一样watch,每 2 秒左右更新一次,并且不需要交互。

注意:我知道在大多数情况下,只需在计算机上运行 SSH 会话并运行 awatch就足够了,或者安装一个可以在浏览器中提供我所需内容的 Web 服务器会更好。然而,由于不同的原因,这两种方法在我的场景中都不实用。另外,为了纯粹满足我的好奇心,我想知道这个问题的答案。

答案1

在我的脑海里,你可以做这样的事情:

  1. 编写一个脚本来完成您需要的任何操作(也许只是watch somecommand,也许更复杂)
  2. 创建一个用户帐户,并将该脚本设置为其登录 shell
  3. 调整您getty以自动登录该用户

这可能会导致无法正常登录;需要进行一些实验才能弄清楚这一点。

当然,显示登录时间信息的正常机制是/etc/issue。然而,从这个角度来看,它似乎并不合适,因为 1. 没有运行任意命令并输出这些命令的机制,2. 没有持续更新输出而不是打印一次的机制。

答案2

如前所述,/etc/issue显示在正确的位置,但它是静态消息。

可以/etc/issue通过强制进程偶尔重新启动来编写脚本getty,但 2 秒的间隔会干扰登录。更实际的间隔大约是一分钟。

对于 Debian,您可能正在使用agetty(请参阅手册页)。可以通过SIGHUP向其发送 a 来重新启动它(如,当然,因为getty运行为)。

相关阅读:

答案3

不要login在 tty 初始化时立即运行,而是运行如下所示的脚本:

#!/bin/sh
(   trap '' TTOU
    while   clear
    do      #gen your output
            sleep 2
    done
) & stty -icanon
    dd    count=1 >/dev/null 2>&1
    stty  icanon
    exec  login

...它将运行您在循环中放入的任何内容,直到至少从 tty 读取一个字节,此时login将被调用。login总是以控制 tty 开始HUP,因此将输出写入终端的后台进程一旦终止就会立即终止,但直到有人按下某个键,它才会继续循环生成您希望的任何输出。即使它可以从后台将输出写入其控制 tty,但无论您的后台循环尝试做什么,它都永远不会成功从中获取任何输入。

相关内容