Wysyłanie danych wejściowych do sesji ekranowej z zewnątrz

18

Mój scenariusz jest następujący:

Mam sesję ekranu uruchomioną w zdalnej lokalizacji. Wewnątrz tego ekranu znajduje się program oparty na konsoli. Program uruchamiany bez ekranu uruchamia się w terminalu i akceptuje polecenia na swoim standardowym wejściu.

Chcę, aby zdalnie wysłać polecenie do ekranu, aby to polecenie zostało odebrane przez program konsoli. Może tak:

Mój komputer -> SSH Send Msg Auto -> Screen Session -> Program (otrzymano polecenie Run)

Tak więc ze zdalnego komputera mogę wysyłać polecenia SSH na ekran, który wysyła je do programu. Program je akceptuje i wykonuje.

Luis Alvarado
źródło

Odpowiedzi:

17

Jeśli dobrze rozumiem, chcesz wysłać dane wejściowe do programu działającego w sesji ekranowej. Możesz to zrobić za pomocą stuffpolecenia screen . Użyj ekranów-X opcji aby wykonać polecenie w sesji ekranu bez dołączania się do niego.

screen -S sessionname -p windowname -X stuff 'command1
command2
'

Jeśli chcesz zobaczyć dane wyjściowe programu, patrz hardcopy, logi logfilepoleceń.

Gilles „SO- przestań być zły”
źródło
Próbowałem już polecenia stuff, ale wysyła tylko polecenia z ekranu. Widzisz, że akceptuje tylko polecenia związane z ekranem, a nie program, którego używam.
Luis Alvarado,
@CYREX: stuffwysyła znaki dokładnie tak, jakby je wpisałeś. Co dokładnie próbowałeś, jaki był zamierzony efekt, a co zamiast tego?
Gilles „SO- przestań być zły”
Widzę, że masz część -p. Nie miałem tego Dodano tę część i teraz wysyła polecenie, ale jak mogę nacisnąć ENTER dla każdego polecenia?
Luis Alvarado,
Znaleziono to. Dodaj $ przed cudzysłowami i ucieka w nim jak C. W ten sposób -X rzeczy $ 'pokaż użytkownikom \ n'
Luis Alvarado
@CYREX: -pjest konieczny (lub przynajmniej dobry pomysł), jeśli istnieje więcej niż jedno okno. Aby „nacisnąć Enter”, po prostu dodaj nowy wiersz do argumentu (tj. Wewnątrz cudzysłowu), tak jak zrobiłem.
Gilles „SO- przestań być zły”