%20%EA%B0%84%EC%9D%84%20%EB%B9%A0%EB%A5%B4%EA%B2%8C%20%EC%A0%84%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
하나의 퍼티 창에 가상 세션이 거의 없고 빠르게 전환하고 싶습니다. 그렇게 하는 가장 좋은 방법은 무엇입니까? screen
? 분리한 다음 다른 세션에 다시 연결할 수 있다는 것을 알고 있지만 ctrl+ad
입력이 많이 필요한 것 같습니다.
답변1
Gnu 화면에 익숙하지 않은 경우 Ansgar가 말한 내용을 확장하면 단일 화면 세션에 여러 개의 "창"이 있으면 필요한 작업을 수행할 수 있습니다.
ctrl+ a, c활성 화면 세션에 새 "창"이 생성됩니다. 다음 창의 경우 ctrl+ 를 a사용 하고 이전 창의 경우 + 를 사용하여 여러 창(Ansgar가 지정한 대로) 사이를 전환할 수 있습니다 .nctrlap
ctrl+ a, "열려 있는 모든 창 목록을 제공합니다.
이러한 쉬운 단축키를 사용하면 매우 빠르고 쉽게 여러 터미널 간에 전환할 수 있어 여러 화면 세션을 사용하지 않고도 목표를 달성할 수 있습니다.
~/.screenrc에 다음 줄을 추가하면 열려 있는 창과 선택된 창을 항상 표시하므로 현재 열려 있는 창을 기억하여 추적할 필요가 없습니다.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
이것은 내가 즐겨 사용하는 hardstatus 행이지만 완전히 사용자 정의할 수 있습니다(맨 페이지를 참조하거나 Google에서 "gnu screen hardstatus"를 검색하세요).
이 앱으로 할 수 있는 다른 작업(예: 열려 있는 다른 창의 이름 지정)이 많이 있으므로 몇 가지 튜토리얼을 읽어 볼 가치가 있습니다.
빠른 검색으로 찾은 몇 가지는 다음과 같습니다.
http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
그리고 물론 가장 유용한 것은 다음과 같습니다.
# From your terminal:
$ man screen
도움이 되길 바랍니다.
매튜
답변2
네, screen
아마도 그렇게 갈 것 같습니다. Ctrl+ a, 다음 창으로 이동하고 + , 이전 창으로 n이동합니다 . + , ..를 사용하면 특정 화면으로 전환할 수 있습니다.CtrlapCtrla09
답변3
오랜 시간을 보낸 후 완전히 누락된 이 기능을 해결하기 위한 스크립트를 만들었습니다. 우선 fifo가 필요합니다.
mkdir ~/.screen
mkfifo ~/.screen/pipe
이 명명된 파이프는 분리된 세션과 "화면 없는 기본" 세션 간의 통신에 유용합니다.
파일sc( $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
"CONFIGFILE"의 예는 다음과 같습니다: ~/.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
결과는 다음과 같습니다. 화면 유형을 시작하려는 경우:
sc Monitor
또는 당신이 만들고 싶은 다른 sessionrc, 저는 다양한 용도로 세션 작업을 사용합니다.
예: ~/.screen/Workrc
layout new Work
screen -t "bash" bash --login
이제 Session Monitor에 다음과 같이 입력합니다.
sc Work
세션 모니터는 자체적으로 분리되고 명명된 파이프에 "Work"를 씁니다. 결과적으로 첫 번째 sc 스크립트가 진행되어 "Work" 세션을 연결합니다.
세션 모니터에서 호출된 sc가 닫힙니다.
모든 세션을 분리하면 무한 루프에 빠지게 되므로 종료하려면 Ctrl-c를 눌러야 합니다.
답변4
다음과 같은 간단한 쉘 스크립트를 사용하여 이 작업을 수행할 수 있습니다.
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
열려 있는 화면이 거의 없다고 가정해 보겠습니다. 또한 작업과 데이터로 분류했다고 가정해 보겠습니다.
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; ...
적용하면
screen -ls
다음과 같은 화면이 나와야 합니다.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.
이제 를 사용하여 분리된 화면을 분리해 보겠습니다
grep
.screen -ls | grep Detached
당신은 이런 것을 얻어야합니다
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)
이제 다시 를 사용하여 원하는 항목(예: 데이터)을 선택해 보겠습니다
grep
.screen -ls | grep Detached | grep data
이렇게 하면 데이터 화면만 격리됩니다. 정규 표현식으로 grep 키워드를 변경하여 검색을 사용자 정의할 수 있습니다.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
다행히 결과는 잘 구조화되어 있고 탭으로 구분되어 있습니다. 이제 열을 필드로 분할하고 를 사용하여 두 번째 필드를 선택해 보겠습니다
cut
.screen -ls | grep Detached | grep data | cut -d' ' -f2
구분 기호 매개변수 뒤에 ctrl+v
를 삽입하려면 Tab 키를 눌러야 합니다 . 결과는 다음과 같아야합니다.tab
-d
81592.data13
81586.data12
81574.data10
81580.data11
이제 따옴표를 사용하여 이를 명령으로 묶고
...
다음과 같은 결과를 반복합니다. 실제로 실행하기 전에 항상 공식화된 명령을 먼저 확인하십시오. 나는 사용했다echo screen -r
for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ echo screen -r $s; \ done
모든 것이 잘 된다면
echo
.for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ screen -r $s; \ done
짜잔. 분리한 각 화면은 다음 화면으로 이동합니다.
즐거운 상영회!!