2014-05-01 31 views
8

Jestem całkiem nowy w tworzeniu skryptów powłoki (możesz powiedzieć, że właśnie zaczynam). Potrzebuję napisać skrypt powłoki, aby otworzyć TYLKO 1 "ekranową" sesję. Następnie chcę otworzyć wiele okien (powiedzmy 10) w tej samej sesji i kazać każdej sesji zrobić coś np. Wydrukować "cześć". Więc tutaj jest częścią mojego kodu ale tylko tworzy jedno okno (0) i nie drukuje nic na tym oknie:Skrypt powłoki rozpoczyna się 1 sesja z wieloma oknami

#!/bin/bash 
screen-d -m -S mysession 
for n in {1..10}; do 
    i=$(($n-1)) 
    screen -S mysession -p $i -X echo "hello" 
done 

Tak jak mówiłem, mój przykładowy kod nie działa! Otwiera jedną sesję z jednym tylko okienkiem "0" i nic nie jest drukowane na terminalu w oknie "0".

Czy możesz mi pomóc? Kod powinien otworzyć jedną sesję ekranu, a następnie w pętli otworzyć 10 okien i wydrukować "witaj" w każdym oknie.

Z góry dziękuję!

Abedin

+0

Co masz na myśli przez "okno"? Czy jest to termin specyficzny dla ekranu? Możesz oznaczyć swoje pytanie za pomocą 'screen' zamiast' shell'. – dg99

+0

Bardzo mi przykro z powodu niewłaściwych tagów! Jestem całkiem nowym użytkownikiem StackOverflow. Zachowam komentarz na przyszłe posty! – user3578925

Odpowiedz

9

Polecenie można wysłać z -X opcja nie jest polecenia, ale polecenie powłoki ekranu.

Sprawdź sekcję DOSTOSOWANIE w sekcji man screen, aby wyświetlić listę poleceń ekranowych. poniższy kod używa polecenia screen do utworzenia nowego okna i polecenia stuff, aby wyświetlić tekst w oknie.

#!/bin/bash 
screen -d -m -S mysession 
# window 0 is created by default, show hello0 on it 
screen -S mysession -p 0 -X stuff hello0 
for n in {1..9}; do 
    # create now window using `screen` command 
    screen -S mysession -X screen $n 
    screen -S mysession -p $n -X stuff hello$n 
done 

Teraz możesz dołączyć do myscreen sesji i sprawdzić, czy istnieje 10 okien i hello0 .. hello9 jest wyświetlany w każdym oknie.

$ screen -r mysession 
[Press C-a "] 
+0

Bardzo dziękuję @ymonad! To się udało! – user3578925

+1

Jeśli chcesz uruchomić polecenie, dobrym idiomem (z devstack) jest mieć zmienną nowego wiersza ('NL = \' echo -ne '\ 015' \ '') i dołączyć ją do twojego polecenia, tak jak poniżej: ' screen -S test -p 0 -X stuff "ping en.wikipedia.org $ NL" ' – MartyMacGyver