Em um script de shell:
if [ -t 0 ]; then
echo stdin is a terminal
fi
Em um script perl
:
print "stdin is a terminal\n" if -t;
Em C:
if (isatty(0)) puts("stdin is a terminal");
Todos eles fazem o mesmo, fazem um tty específico ioctl
e retornam true a menos que o ioctl
falhe com um erro ENOTTY. No meu sistema, o ioctl
é TCGETS e acredito que seja bastante comum, pois é óbvio.
$ : | strace -e ioctl su
ioctl(0, TCGETS, 0x7ffff32dfc50) = -1 ENOTTY (Inappropriate ioctl for device)
su: must be run from a terminal