Linuxでは、シェルスクリプトが標準入力がnullデバイス(1、3)*からリダイレクトされているかどうか、理想的には何も読み取らないかどうかを確認する方法はありますか?
予想される動作は次のとおりです。
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
私は、入力デバイスの maj / min数を読み取る必要があるだけだと思います。しかし、シェルからそれを行う方法を見つけることができません。
*は必要ありません
/dev/null
が、で手動で作成した場合でも nullデバイスがありますmknod
。
{ readlink -f /dev/stdin; } <&6
execを使用してノードを削除した場合の出力は/root/secretunknownname (deleted)
です。ファイルが削除されたことを示しているので、必要なもので十分ではありませんか?
stat
ソリューションが唯一の有効なものです。
/dev/null
が、必須ではありません。「エイリアス」はmknod
、私の例に示されているsを使用できます。
/dev/null
であるのか、それともttyではないのかを知る必要がありますか?