我正在尝试在Linux上的Perl脚本中确定它是否在终端上运行。
也就是说,我需要代码:
- 仅在命令行上运行时返回true。 - 在运行
特别是由于第二个要求,我不能使用
这些信息似乎是可用的。如果我运行
也就是说,我需要代码:
- 仅在命令行上运行时返回true。 - 在运行
./myscript.pl | less
甚至是./myscript.pl </dev/null >/dev/null 2>/dev/null
时也返回true。
- 在cron作业或CGI脚本中运行时返回false。特别是由于第二个要求,我不能使用
-t STDOUT
和变体,IO::Interactive也没有用。这些信息似乎是可用的。如果我运行
ps
,它会在列中显示类似pts/2
的条目,即使我运行./myscript.pl </dev/null >/dev/null 2>/dev/null
,并且在作为cron作业或CGI脚本运行时显示?
。
有没有一种优雅的方法可以在Perl脚本中确定这一点? 我不想解析ps
的输出。
isatty(3)
函数。 - Keithisatty
存在于 POSIX 模块中,但是和-t
一样,只是检查文件句柄是否连接到 tty。这不是我需要的... - mschactermid
确实存在于POSIX模块中。不幸的是,它在命令行和cron作业中都返回/dev/tty/
。 - mscha