/dev/tty открывается в терминале nailgun-сервера

Учитывая образец сценария, который открывается /dev/tty:

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

Я могу запустить его с нормальным Jruby просто отлично:

% jruby sample.rb
> hello
HELLO
%

Однако, если я попытаюсь использовать /dev/tty с помощью nailgun 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?

1 ответ

Решение

Глядя на клиент-серверный протокол Nailgun, не похоже, что он поддерживает то, что должно произойти, чтобы использовать клиентские /dev/tty (клиент должен открыть файл, чтение / запись от клиента к серверу).

Является ли это ошибкой или нет, в настоящее время она находится за пределами возможностей Nailgun.

Определить, находимся ли мы на сервере Nailgun, можно с помощью

# true if on a nailgun server, false elsewise
system("ps -fp #{Process.pid} | grep NGServer > /dev/null")
Другие вопросы по тегам