Bash
只允許活著的呼吸使用者發出命令
我有一個接受來自標準輸入的輸入的應用程序,讓我們呼叫這個
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 -s
returnfalse
,你知道輸出是一個文件(不是使用者),- 如果
tty -s
返回true
,你不知道。這允許不同的格式(如
ls
),或防止互動使用。