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 サーバー上にいるかどうかを検出するには、

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