Su Linux, c'è un modo per uno script di shell di verificare se il suo input standard viene reindirizzato dal dispositivo null (1, 3) * , idealmente senza leggere nulla?
Il comportamento previsto sarebbe:
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
Sospetto di aver "solo" bisogno di leggere il numero maggiore / minimo del dispositivo di input . Ma non riesco a trovare un modo per farlo dalla shell.
* Non necessario
/dev/null
, ma qualsiasi dispositivo null anche se creato manualmente con mknod
.
{ readlink -f /dev/stdin; } <&6
per il caso in cui è stato utilizzato exec e rimosso il nodo è /root/secretunknownname (deleted)
. Come dimostra che il file è stato cancellato: non è abbastanza per quello che ti serve?
stat
soluzione è l'unica che funziona.
/dev/null
, ma non è necessario. Puoi "alias" con mknod
s illustrato nel mio esempio.
/dev/null
, o semplicemente che non è un tty?