5

给定一个打开的示例脚本/dev/tty

# sample.rb
tty=File.open("/dev/tty", "w+")
tty.print "> "
tty.puts tty.gets.upcase

我可以用普通的 jruby 运行它就好了:

% jruby sample.rb
> hello
HELLO
%

但是,如果我尝试使用/dev/ttynailgun,则 tty 绑定到 nailgun 服务器,而不是客户端:

# server terminal                                     | # client terminal
% jruby --ng-server                                   |
NGServer 0.9.1 started on all interfaces, port 2113.  |
                                                      | % jruby --ng sample.rb
> hello                                               |
HELLO                                                 |
                                                      | %

(垂直间距是为了显示时序,每个的实际输出缺少空行)

这是预期的行为,还是错误?

如果这是预期的行为,有没有办法可以检测脚本是否正在运行,--ng这样我就可以避免打开/dev/tty

4

1 回答 1

0

查看Nailgun 客户端/服务器协议,它看起来不支持使用客户端需要发生的事情/dev/tty(让客户端打开文件,从客户端读取/写入服务器)。

无论它是否是一个错误,它目前都超出了 Nailgun 的能力范围。

检测我们是否在 Nailgun 服务器上可以通过

# true if on a nailgun server, false elsewise
system("ps -fp #{Process.pid} | grep NGServer > /dev/null")
于 2015-04-08T19:15:30.440 回答