我有一个接受来自标准输入的输入的应用程序,让我们调用这个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 -s
returnfalse
,你知道输出是一个文件(不是用户), - 如果
tty -s
返回true
,你不知道。
这允许不同的格式(如ls
),或阻止交互式使用。