Question

How can I tell if STDIN is connected to a terminal in Perl?

Was it helpful?

Solution

if (-t STDIN) {
  # stdin is connected
} else {
  # stdin is not connected
}

I usually use this in conjunction with -t STDOUT, to find out if I'm running from an interactive shell, or from cron, to enable more output.

OTHER TIPS

You might also be interested in IO::Interactive to figure out if Perl thinks it is interacting with a user. Simply being connected to a tty doesn't mean the user is going to see what you do.

One solution would be to use tty:

[root@server] ~> tty
/dev/pts/0
[root@server] ~> echo y | tty
not a tty

But not very pretty...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top