suman-f
標準入力から入力を受け取るアプリケーションがあります。コマンドラインから実行できるこのアプリケーションを呼び出してみましょう。実際の人間のユーザーにのみ入力を制限し、自動化されたプログラムの入力を許可したくありません。その理由は、複数のプロセスがstdinに情報を送信すると、情報チャネルは1つだけであり、通信者は複数であるため、誤ったコードが表示されるためです。
suman-f
人間以外のものが端末を介して実行されるのを防ぐ方法はありますか?
あるいは、標準入力を再利用できる魔法のような方法があれば聞きたいです。
答え1
短い答えはいいえ。
Unixシステムには、特定のプロセスのstdinが人によって処理されているかどうかを知る方法はありません。
端末
最良の近似値はです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
を返すと、出力がファイルfalse
(ユーザーではない)であることがわかります。tty -s
が返されるとtrue
不明です。
これは、さまざまな形式(たとえばls
)を受け入れたり、対話型の使用を防ぎます。