15.2 プログラムが対話的に実行されているかどうか判定する
プログラムが対話的に実行されているかどうか知りたい。例えば、プログラムがシェルから実行されている場合は対話的であり、プログラムがcronから呼び出されている場合は対話的でない。
- -tを使用してSTDINとSTDOUTをテストする
sub I_am_interactive { return -r STDIN && STDOUT; }
- POSIXシステムでプログラムを実行している場合は、プロセスグループをテストする
use POSIX qw/getpgrp tcgetpgrp/; sub I_am_interactive { my $tty; open($tty, "<", "/dev/tty") or die; my $tpgrp = tcgetpgrp(fileno($tty)); my $pgrp = getpgrp(); close $tty; return ($tpgrp == $pgrp); }