En Linux, ¿hay alguna forma de que un script de shell compruebe si su entrada estándar se redirige desde el dispositivo nulo (1, 3) * , idealmente sin leer nada?
El comportamiento esperado sería:
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
Sospecho que "solo" necesito leer el número de may / min del dispositivo de entrada . Pero no puedo encontrar una manera de hacerlo desde el shell.
* No es necesario solo
/dev/null
, pero cualquier dispositivo nulo, incluso si se creó manualmente con mknod
.
{ readlink -f /dev/stdin; } <&6
para el caso donde usó exec y eliminó el nodo es /root/secretunknownname (deleted)
. Como muestra que el archivo se eliminó: ¿no es suficiente para lo que necesita?
stat
solución es la única que funciona.
/dev/null
, pero no es necesario. Puede "alias" con mknod
s ilustrado en mi ejemplo.
/dev/null
, o simplemente que no es un tty?