Di Linux, apakah ada cara agar skrip shell memeriksa apakah input standarnya dialihkan dari perangkat nol (1, 3) * , idealnya tanpa membaca apa pun?
Perilaku yang diharapkan adalah:
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
Saya kira saya "hanya" perlu membaca nomor maj / min dari perangkat input . Tetapi saya tidak dapat menemukan cara untuk melakukan itu dari shell.
* Tidak perlu adil
/dev/null
, tetapi perangkat null apa pun meskipun dibuat secara manual mknod
.
{ readlink -f /dev/stdin; } <&6
untuk kasus di mana Anda menggunakan exec dan menghapus node /root/secretunknownname (deleted)
. Karena ini menunjukkan bahwa file terhapus: Apakah itu tidak cukup untuk apa yang Anda butuhkan?
stat
solusinya adalah satu-satunya yang berfungsi.
/dev/null
, tetapi tidak perlu. Anda dapat "alias" dengan mknod
huruf s yang diilustrasikan dalam contoh saya.
/dev/null
, atau hanya saja itu bukan tty?