2011-06-28 16 views

Odpowiedz

26

znalazłem dobry tutorial tutaj, aby to zrobić:

http://blog.cone.be/2009/11/24/gnu-screen-nethack-different-screen-windows-sending-commands-to-all-screen-windows/

Z postu:

Gdy ponownie wykorzystane do wielu oknach, można uruchomić w sytuacji, gdy chcesz wysłać to samo polecenie do kilku z tych otwartych okien. Ekran zapewnia w tym celu polecenie "at". Najpierw musisz otworzyć tryb wiersza poleceń.

C-a: (dwukropek) Wejdź w tryb wiersza poleceń.

W ten sposób możesz wpisać komendę raz, ale musisz jeszcze wprowadzić każde oddzielne okno. Ale jest lepszy sposób. Jako przykład wyślemy "ls -l" do wszystkich okien.

na "#" rzeczy "ls -l^M"

Komenda ta jest ledwo czytelny, więc niech odebrać go od siebie! Pierwsza część to "przy [identyfikator] [# | * |%] polecenie". Polecenie at wysyła parametr tekstowy do wszystkich okien określonych w identyfikatorze. Możesz dopasować kryteria do nazwy lub numeru okna z #, nazwą użytkownika z * lub wyświetlaczami, używając%. Następna część to polecenie, które chcesz uruchomić w wybranych oknach. Używamy "stuff" do wypchnięcia polecenia, które chcemy wykonać, do bufora wejściowego wybranych okien. Rzeczy są naprawdę proste. Po prostu napełnia cię ciąg znaków jako parametr. Kolejnym problemem jest polecenie. A raczej wykonanie go! Aby uzyskać ekran do wprowadzenia "enter" po poleceniu, aby wykonać polecenie, dodaj "^ M" na końcu. Możesz zrobić o wiele więcej niż tylko wysłanie pliku Ls na wejście. Wszelkie polecenia ekranowe, takie jak zmiana nazwy, przenoszenie okien, itp. Są dostępne w połączeniu z "at".

+2

+1 za "rzeczy". Wielkie dzięki, Corey! –

+1

To jest dźwięk milionów zapomnianych sesji ekranowych powoli umierających: 'screen -X na" Dzięki za latające Vim # "rzeczy"^UTMOUT = 3600^M "' ** + 1 ** – Orwellophile

8

Przepraszamy za tę spóźnioną odpowiedź, ale tmux może być lepszym wyborem dla Ciebie niż screen. W polu tmux należy nacisnąć: C-b :, aby przejść do trybu poleceń i wprowadzić: setw synchronize-panes (lub po prostu setw sync<Tab> przy użyciu autouzupełniania). Zauważ, że to polecenie umożliwia synchronizację pomiędzy panelami (obszary jednego podzielonego ekranu, widoczne jednocześnie), ale nie pomiędzy oknami (pełne, nie podzielone, ekrany).

+0

jest to znacznie lepszy sposób i wrażenia wizualne w porównaniu z inną odpowiedzią. – Endophage

+1

Przepraszam, ale pytanie dotyczy ekranu, zgadzam się, że tmux to o wiele lepszy program, ale tutaj nie ma to znaczenia. – runlevel0

5

Możesz również chcieć wysyłać tylko do wybranych okien (multicast).

  1. Konwencja: Daj 1st charakter tytule okna znaczenie flagi nadawania. Na przykład. jeśli tytuł zaczyna się od "." wtedy okno nasłuchuje, inaczej nie.
  2. Ustaw tytuły zgodnie z potrzebami.

    screen -S SessionName -p 0 -X title "remote_0"  # window 0: ignore multicast 
    screen -S SessionName -p 1 -X title ".remote_1" # window 1: listen to multicast 
    
  3. Wyślij zawartości do słuchaczy z polecenia at ekranu

    screen -S SessionName -X at ".#" stuff "date 
    " 
    
  4. Uwaga: powyższy zakończenie cudzysłów zapewnia^M ma zostać wysłany (Cr).

  5. Możesz włączyć/wyłączyć multicast na podstawie tytułu okna w ten sposób.

Powiązane problemy