No Linux, existe uma maneira de um script de shell verificar se sua entrada padrão é redirecionada do dispositivo nulo (1, 3) * , idealmente sem ler nada?
O comportamento esperado seria:
./checkstdinnull
-> no
./checkstdinnull < /dev/null
-> yes
echo -n | ./checkstdinnull
-> no
EDIT
mknod secretunknownname c 1 3
exec 6<secretunknownname
rm secretunknownname
./checkstdinnull <&6
-> yes
Eu suspeito que "apenas" preciso ler o número principal / min do dispositivo de entrada . Mas não consigo encontrar uma maneira de fazer isso a partir do shell.
* Não é necessário apenas
/dev/null
, mas qualquer dispositivo nulo, mesmo se criado manualmente com mknod
.
{ readlink -f /dev/stdin; } <&6
para o caso em que você usou exec e removeu o nó é /root/secretunknownname (deleted)
. Como mostra que o arquivo foi excluído: não é suficiente para o que você precisa?
stat
solução é a única que funciona.
/dev/null
, mas não necessário. Você pode "alias" é com mknod
s ilustrado no meu exemplo.
/dev/null
ou apenas não é um tty?