В Linux есть ли способ для сценария оболочки проверить, перенаправлен ли его стандартный ввод с нулевого устройства (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
Я подозреваю, что мне «просто» нужно прочитать число маж / мин устройства ввода . Но я не могу найти способ сделать это из оболочки.
* Нет необходимости просто
/dev/null
, но любое нулевое устройство, даже если оно создано вручную с помощью mknod
.
{ readlink -f /dev/stdin; } <&6
для случая , когда вы использовали Exec и удалить узел /root/secretunknownname (deleted)
. Как показывает, что файл был удален: Разве этого недостаточно для того, что вам нужно?
stat
решение работает только одно.
/dev/null
, но не обязательно. Вы можете "псевдоним" с mknod
s, иллюстрируется в моем примере.
/dev/null
, или просто это не tty?