2010-08-02 51 views
12

是否有一个标准(ish)POSIX方法来确定我的过程(我现在将它写成Ruby脚本;但我对多个环境感兴趣,包括Node.js和ISO C命令行应用程序)正在交互式终端中运行,与cron或其他工具的执行相反,或者......等等。我需要在某些情况下获取用户输入,如果可以确定的话,我需要致命地失败不可能(即由cron运行)。我可以用环境变量来做到这一点,如果可以的话,更喜欢更标准的东西。如何确定我的流程是否正在交互式运行?

+2

对于任何来这里寻找windows的人来说,对于win32来说,请尝试System.Environment.UserInteractive for .Net或者GetUserObjectInformation,这对于非交互式进程将会失败。 – Mitch 2011-07-06 20:10:48

+0

你可以添加,作为一个实际的答案,并从中获得声誉。 (= – ELLIOTTCABLE 2011-07-09 19:39:46

回答

13

我一直使用$stdout.isatty来检查这个。其他方法可能包括检查ENV['TERM']的值或使用ruby-terminfo宝石。

+1

'isatty'似乎是ruby IO类的一部分:http://ruby-doc.org/core-2.2.2/IO.html#method-i-isatty – akostadinov 2015-08-11 20:31:55

4

AFAIK最接近你的是isatty()。但正如页面本身所说,没有什么能保证人类正在控制终端。

相关问题