终端

终端

我有一个接受来自标准输入的输入的应用程序,让我们调用这个suman-f可以通过命令行运行的应用程序。我想将输入限制为仅真正的人类用户,并且不允许来自自动化程序的输入。这样做的原因是,如果多个进程向 stdin 发送信息,就会出现乱码,因为只有一个信息通道,但有多个通信器。

有没有办法阻止除了人类之外的任何东西suman-f通过终端执行?

或者如果有某种神奇的方法来复用标准输入,我很想听听。

答案1

简短的回答是

Unix 系统无法知道特定进程的 stdin 是否由人处理。

终端

你最好的近似值是tty. (看man tty)。

tty(终端)是与系统交互的方式(参见“终端”、“shell”、“tty”和“控制台”之间的确切区别是什么?)。

这就是它的工作原理

if tty -s
then
    echo a human might be reading "or not)"
else
    echo output is a file
fi

换句话说

  • 如果tty -sreturn false,你知道输出是一个文件(不是用户),
  • 如果tty -s返回true,你不知道。

这允许不同的格式(如ls),或阻止交互式使用。

相关内容