Szukałem sposobu na wysłanie polecenia do odłączonej sesji ekranowej. Jak na razie dobrze. Oto co wymyśliłem:
$ screen -S test -p 0 -X stuff 'command\n'
To polecenie działa tak, jak powinno. Ale chciałbym też, żeby wynik był z niego odbity echem prosto przed moimi oczami (nie potrzebuję .log
pliku ani czegoś takiego, chcę tylko wynik).
Użycie screen -L
polecenia nie jest opcją.
linux
ubuntu
gnu-screen
Rudzik
źródło
źródło
screen
? Czy nie po to są tworzone procesy potomne?Odpowiedzi:
Użyj rury „pierwszy na wejściu”:
Użyj operatora przekierowania. Przekieruj dane wyjściowe polecenia do / tmp / test, na przykład w następujący sposób:
Następnie w innej powłoce
Pamiętaj, że możesz również przekierowywać komunikaty o błędach za pomocą operatora 2> i 1 .
Przykład
Zgodnie z żądaniem w komentarzach, załóżmy, że mamy skrypt php akceptujący dane wejściowe użytkownika i drukujący obciążenie serwera na wejściu „status”:
Tworzysz dwa fifos:
Dzwonisz na ekran:
W innej konsoli nazwijmy ją konsolą 2, w której znajdziesz nazwę swojego ekranu:
W konsoli 2 wysyłasz polecenie na ekran:
polecenie pojawi się na ekranie. Teraz w konsoli 2 możesz wysyłać polecenia do procesu php:
i czytaj z niego:
źródło
Mam skrypt w języku Python, który śledzi wiele odłączonych sesji ekranowych i przechwytuje dane wyjściowe z każdej z nich (gdy polecenia użycia, takie jak free, top -bn2, iostat, są okresowo wysyłane przez „rzeczy”).
Zamiast przekierowywać do pliku, a tym samym zarządzać co najmniej jednym plikiem dla każdej odłączonej sesji ekranowej ... Po prostu przekierowuję do dowolnego tty / pts, którego używa moja sesja nadrzędna.
Krok # 1: Rozpocznij nową sesję ekranu (z czytelną dla człowieka nazwą) w trybie odłączonym.
Krok # 2: Wyślij swoje polecenia (użyję polecenia „free -g” wraz z „uname -r”) za pośrednictwem różnych rzeczy. Ważne jest, aby określić okno, którego chcesz użyć (w naszym przypadku pierwsze i jedyne okno) za pomocą -p.
Krok # 3: Powyższy krok wysyła tylko tekst polecenia. Musimy również wysłać powrót karetki do tej odłączonej sesji ekranu, aby powłoka wykonała nasze polecenie. Znak ASCII 015 jest znakiem powrotu karetki w większości systemów * nix.
Krok # 4: Przekieruj wyjście z naszej odłączonej sesji ekranu do naszego obecnego tty / pts:
Wynik kroku 4 będzie wyglądał mniej więcej tak:
Chociaż wydaje się to trochę skomplikowane, proces ten można łatwo wykonać za pomocą skryptów. Za pomocą Pythona mogę analizować dane wyjściowe z kroku 4 i przechwytywać tylko te dane, na których mi zależy.
Wybierając prosty scenariusz, na przykład zbieranie szczegółów adresu IP, napisałem przykładowy skrypt, aby zademonstrować powyższe pojęcia. Zapraszam do wymiany i majsterkowania, kiedy uznasz to za stosowne.
Przykładowy skrypt Pythona, aby uzyskać szczegóły IP z odłączonej sesji ekranu:
Powyższy skrypt w akcji:
źródło
screen -X logfile /tmp/something
;screen -X log on
;screen -X stuff "command param"
;screen -X log off
pracować jeszcze lepiej w tym scenariuszu.Przykład:
źródło