2015-04-08 76 views
5

Biorąc przykładowy skrypt, który otwiera /dev/tty:/dev/tty otwiera się w pistolet na gwoździe serwera terminali

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

mogę uruchomić go z normalnego jruby dobrze:

% jruby sample.rb 
> hello 
HELLO 
% 

Jednak gdy próbuję używać /dev/tty z Pistolet na gwoździe, wówczas tty jest związany z serwerem pistolet na gwoździe, a nie klient:

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

(odstępy w pionie oznaczają wyświetlanie taktowania, rzeczywisty wynik dla każdego z nich nie zawiera pustych linii)

Czy to oczekiwane zachowanie, czy błąd?

Jeśli to oczekiwane zachowanie, czy istnieje sposób, w jaki mogę wykryć, czy skrypt jest uruchamiany z --ng, więc mogę uniknąć otwierania /dev/tty?

Odpowiedz

0

Patrząc na , nie wygląda na to, że obsługuje to, co musiałoby się zdarzyć, używając klienta /dev/tty (klient ma otworzyć plik, odczyt/zapis z klienta na serwer).

Niezależnie od tego, czy jest to błąd, czy nie, obecnie nie ma możliwości programu Nailgun.

Wykrywanie czy jesteśmy na serwerze pistolet na gwoździe można zrobić poprzez

# true if on a nailgun server, false elsewise 
system("ps -fp #{Process.pid} | grep NGServer > /dev/null")