如何在自己的 tty 中运行程序?

Ten*_*ken 5 shell bash terminal tty ioctl

我正在搞乱 TIOCSTI,它将数据推送到终端的输入缓冲区。我希望能够在这些数据到达 shell 或将其重定向到文件之前捕获它。

为了更好地说明我正在尝试做的事情:

gcc -x c -o pusher.bin - <<PUSHER
#include <unistd.h>
#include <sys/ioctl.h>
#include <termios.h>

int main() {
  char *c = "echo 'Catch me if you can'\n";
  while(*c) ioctl(0, TIOCSTI, c++);
}
PUSHER
./pusher.bin
Run Code Online (Sandbox Code Playgroud)

如果在我的终端中运行,./pusher.bin将注入echo 'Catch me if you can'\n我的 shell 将立即执行的 tty。如果我运行setsid ./pusher.bin, echo 将不会注入我的终端,但我也无法捕获它。

我想./pusher.bin用一些东西来包装,这样我就可以检查在我的 tty 的输入缓冲区中注入了什么推送器,如果它是裸运行的。

澄清:我知道注入的输入可以在到达我的 shell 的标准输入后被捕获。这种方法虽然在捕获注入的输入方面很有效,但也将捕获正常的用户输入。此外,如果 stdin 已关闭或进程未附加到 tty,则此方法将不起作用。仅这些缺点就使得捕获 stdin 作为通用解决方案不可行。