Bash

只允許活著的呼吸使用者發出命令

  • August 8, 2017

我有一個接受來自標準輸入的輸入的應用程序,讓我們呼叫這個suman-f可以通過命令行執行的應用程序。我想將輸入僅限於真正的人類使用者,並且不允許來自自動化程序的輸入。這樣做的原因是,如果多個程序向標準輸入發送資訊,它會出現亂碼,因為只有一個資訊通道,但有多個通信器。

有沒有辦法阻止除了人類suman-f通過終端執行之外的任何事情?

或者,如果有一些神奇的方法可以復用標準輸入,我很想听聽。

簡短的回答是否定的。

Unix系統無法知道特定程序的標準輸入是否由人處理。

tty

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

tty(終端)是與系統互動的方式(請參閱“終端”、“外殼”、“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),或防止互動使用。

引用自:https://unix.stackexchange.com/questions/377635