Odpowiedzi:
Aby rozwinąć to, co powiedział Ansgar w przypadku, gdy nie jesteś zbyt zaznajomiony z ekranem GNU, posiadanie wielu „okien” w sesji jednego ekranu prawdopodobnie spełni twoje oczekiwania.
ctrl+ a, cutworzy nowe „okno” w aktywnej sesji ekranu. Możesz przełączać się między wieloma oknami (jak wskazano w Ansgar) za pomocą ctrl+ a, ndla następnego okna i ctrl+ a, pdla poprzedniego okna.
ctrl+ a, "wyświetli listę wszystkich otwartych okien.
Korzystanie z tych prostych skrótów pozwala szybko i łatwo przełączać się między różnymi terminalami, osiągając cel bez konieczności korzystania z wielu sesji ekranowych.
Jeśli dodasz następujący wiersz do ~ / .screenrc, zawsze wyświetli on twoje otwarte okna i które z nich jest zaznaczone, więc nie musisz śledzić, w którym oknie zapamiętasz.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
Jest to linia hardstatus, której lubię używać, ale można ją całkowicie dostosować (zobacz stronę podręcznika man lub wyszukaj w Google hasło „gnu screen hardstatus”).
Jest mnóstwo innych rzeczy, które możesz z tym zrobić (na przykład nazywając różne otwarte okna), więc warto przeczytać kilka samouczków.
Oto kilka, które znalazłem dzięki szybkiemu wyszukiwaniu:
http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
I oczywiście najbardziej przydatne ze wszystkich:
# From your terminal:
$ man screen
Mam nadzieję, że to pomaga.
Mateusz
Tak, screen
najprawdopodobniej jest to najlepsza droga. Ctrl+ a, nprzeniesie Cię do następnego okna, Ctrl+ a, pdo poprzedniego. Ctrl+ a, 0.. 9pozwoli Ci przejść do określonego ekranu.
To, co mówią inni, jest poprawne. Chcę tylko wspomnieć, że tmux
jest alternatywą dla screen
. Mają bardzo podobne polecenia.
Zarówno screen
i tmux
oferują wiele okien dla działającej sesji, a to jest chyba to, co chcesz.
tmux
dodatkowo oferuje przechodzenie między wieloma sesjami (każda z nich ma własne okna). Bardzo rzadko byś tego potrzebował.
Oto kilka linków do dokumentacji ekranu i kursu awaryjnego na temat tmux .
Po tak długim czasie stworzyłem skrypt, aby obejść tę całkowicie brakującą funkcję. Po pierwsze potrzebuje piątki:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Ten nazwany potok jest użyteczny do komunikacji między odłączoną sesją a sesją „Main-without-screen”.
Plik sc (w $ PATH):
#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"
if [ ! -r $CONFIGFILE ] ; then
echo "Configurazione per $1 Assente" >&2
exit 1
fi
exec 3<> ~/.screen/pipe
if [ "$STY" != "" ] ; then
screen -d "$STY"
echo "$1" >&3
else
screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
while true ; do
read line <&3
screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
done
fi
Przykładem „CONFIGFILE” jest: ~ / .screen / Monitorrc
layout new Monitor
screen -t "bash" bash --login
split -v
focus next
split
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left
Wynik jest następujący: gdy chcesz uruchomić typ ekranu:
sc Monitor
lub inną sesję, którą lubisz wymyślać, używam Session Work do różnych rzeczy
Np .: ~ / .screen / Workrc
layout new Work
screen -t "bash" bash --login
Teraz jesteśmy w Monitorze sesji, kiedy piszemy:
sc Work
Monitor sesji odłącza się i zapisuje „Work” na nazwanej rurze. W związku z tym pierwszy skrypt sc idzie do przodu i dołącza sesję „Work”.
Sc wywołany z Monitora sesji zamknij.
Kiedy odłączamy wszystkie sesje, jesteśmy w nieskończonej pętli, więc musimy nacisnąć Ctrl-c, aby wyjść.
Możesz to zrobić za pomocą prostego skryptu powłoki, takiego jak
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
Załóżmy, że masz kilka otwartych ekranów. Załóżmy również, że masz je sklasyfikowane jako praca i dane.
for i in {10..13}; do screen -S `printf data%02d $i`; done;
for i in {0..5}; do screen -S `printf work%02d $i`; done;
...
Aplikując screen -ls
, powinieneś mieć takie ekrany
There are screens on:
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81607.ttys014.Mo (Attached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
Teraz pozwala izolować odłączone ekrany za pomocą grep
.
screen -ls | grep Detached
Powinieneś dostać coś takiego
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
Teraz pozwala wybrać te, które chcesz (np. Dane), ponownie za pomocą grep
.
screen -ls | grep Detached | grep data
Spowoduje to odizolowanie tylko ekranów danych. Możesz zmienić słowo kluczowe grep za pomocą wyrażeń regularnych, aby wyszukiwać, aby dostosować wyszukiwanie.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
Na szczęście wynik jest dobrze skonstruowany i rozdzielany tabulatorami. Teraz pozwala podzielić kolumny na pola i wybrać 2. pole za pomocą cut
.
screen -ls | grep Detached | grep data | cut -d' ' -f2
Będziesz musiał nacisnąć, ctrl+v
a następnie Tab, aby wstawić tab
parametr za separatorem -d
. Wyniki powinny być takie.
81592.data13
81586.data12
81574.data10
81580.data11
Teraz spakuj to do polecenia, używając ...
cudzysłowów i zapętlaj wyniki w ten sposób. Zawsze sprawdzaj sformułowane polecenia 1. przed ich uruchomieniem. użyłemecho screen -r
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
echo screen -r $s; \
done
Jeśli wszystko pójdzie dobrze, spróbuj tego bez echo
.
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
screen -r $s; \
done
Voila Każdy ekran, z którego się odłączysz, prowadzi do następnego.
Miłego pokazu !!
Napisałem skrypt węzła, który pozwala użytkownikowi wybrać sesję ekranu, do której chcesz dołączyć z listy, używając klawiszy strzałek. Zrobiłem to pakiet npm. Możesz to sprawdzić tutaj: screen-command . Lub po prostu npm i -g screen-command
wypróbuj, zakładając, że masz już plik node.js. Po zainstalowaniu pakietu użyj polecenia, sc
aby przywołać listę ekranów.
Mam nadzieję, że ułatwi to przejście do dokładnie tego ekranu, który chcesz.
^a
na coś innego, więc nie jest śmiesznie denerwujące korzystanie z edycji linii w stylu emacsa w bash, cokolwiek innego. Używam^t
.