Você pode fazer isso a partir do bash usando um tempo limite 0 para read
.
if read -t 0
then read data
fi
Para testar um descritor de arquivo diferente de stdin, digamos 3, use -u 3
. Para descobrir quantos caracteres estão prontos no stdin, você pode usar um pequeno script em perl:
#!/usr/bin/perl
require 'sys/ioctl.ph';
$size = pack("L", 0);
ioctl(*STDIN, FIONREAD(), $size) or die "ioctl fail: $!\n";
$size = unpack("L", $size);
print "stdin ready: $size\n";