Jak uzyskać wyjście ze skryptu `screen` do skryptu?

33

Mam screenuruchomioną instancję i musiałbym wykonać część kodu wewnątrz screeni pobrać wynik do mojego skryptu.

Pierwsza część jest dość łatwa screen -S session_name -X eval 'stuff "$cmd"\015'.
(Zmieniłem wiersz znaleziony w skrypcie )

Druga część, polegająca na wydostaniu się z produkcji, jest trudniejsza. Jak mogę uzyskać cały wynik, niezależnie od jego wielkości?

1 miejsce
źródło
1
Powiązane: wyjaśnieniescreen -X stuff … ; pytanie podobne do twojego .
Gilles „SO - przestań być zły”
Dzięki :) Drugi link został wyjaśniony, dlaczego pierwsze polecenie musi być stuff, i właśnie to miałem problem ze zrozumieniem.
miejsce

Odpowiedzi:

29

Możesz zacząć screenod -Lopcji. Spowoduje to, że screen utworzy plik screenlog.n(część n jest numeryczna, zaczynając od zera) w bieżącym katalogu roboczym.

W twoim przypadku wyglądałoby to tak: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Tak długo, jak pamiętasz, aby posprzątać później, powinno to pasować do tego, czego szukasz.

W przypadku ostatniego wiersza dziennika można go łatwo uzyskać za pomocą tail -1 screenlog.0lub cały dziennik można przeanalizować w dowolny sposób.

NJ
źródło
Jedno tylko: screenpolecenie, które wydałem, to po prostu wysłanie polecenia. Aby rozpocząć screen, użyłem screen -dmS name program;-)
1
22

Jeszcze jeden niuans, który może być pomocny w przyszłości: jeśli jesteś w sesji ekranowej, możesz interaktywnie poprosić o utworzenie pliku dziennika. Naciśnij ctrl- a H(Control-A, a następnie duże H), aby poprosić screen o rozpoczęcie zrzutu dowolnego okna w pliku dziennika.

rickumali
źródło
5
Nie wiem, czy to z powodu nowszej wersji, ale mój man screenmówi: muszę wpisać CA H, bez kontroli tylko dla H. Sad, że to nie przechwytuje poprzedniego dziennika.
Matmarbon,
2
Masz rację! CA H generuje plik dziennika. Pamiętaj, że jest to wielka litera H (mała litera h tworzy jedynie kopię bieżącego ekranu).
rickumali
3
Zaktualizuj odpowiedź do CA H. Przyszli użytkownicy mogą wprowadzać w błąd i przegapić prawidłową odpowiedź.
gc5
Czy ktoś zna sposób na przesłanie polecenia za pomocą skryptu? Jak w kontroli wysyłania + a, a następnie H po ułamku sekundy.
Zach W.