다음 기능을 달성하는 깨끗한 방법은 무엇입니까?
function screen_create_or_reuse(){
if [ running_screen_session "$1" ]; then
reattach_screen_session screen_name_"$1"
else
create_screen_session "$1" screen_config_"$1" screen_name_"$1"
fi
}
screen -ls
현재 세션이 이미 실행 중인지( 또는 아닌지 ) 걱정해야 합니다 screen -wipe
. 이에 따르면 실행되지 않으면 사용자 정의 구성 및 이름을 사용하여 세션( )을 수동으로 생성한 다음 screen -c config -S name
수동으로 다시 연결합니다. 나는 screen_create_or_reuse name
이러한 모든 세부 사항을 처리할 수 있는 명령을 원합니다 .
세션 등의 존재를 감지하기 위해 bash 스크립트를 작성하려고 생각했지만 화면에 이미 많은 옵션이 있는 것을 보니 너무 멀리 갈 수도 있습니다.
화면을 사용하여 위의 내용을 달성하는 깨끗한 방법은 무엇입니까?
답변1
다음 옵션은 다음과 같습니다 man screen
.
-d -R Reattach a session and if necessary detach or even create it first.
이를 사용하여 -S
세션 이름을 설정합니다.
답변2
대부분의 경우 -S foo -d -RR
원하는 작업을 수행합니다. 즉, 지정한 이름으로 세션에 연결하고 세션이 아직 없으면 세션을 만듭니다.
나는 한 단계 더 나아가 이름별 프로필을 찾는 것을 좋아합니다. 이를 통해 다양한 세션 이름, 실행 애플리케이션 등에 대해 다양한 환경 변수를 정의할 수 있습니다.
etc/screen/0.screenrc
다음은 다른 세션별 구성 파일에서 가져온 내 파일입니다 .
source ~/.screenrc
unsetenv DISPLAY
msgminwait 0
msgwait 0
screen -t post_initialization 39 sh -c 'sleep 1; screen -X msgwait 5; screen -X msgminwait 1'
etc/term/emacs.screenrc
다음은 Emacs를 실행하는 창을 시작하는 세션별 구성 파일의 예입니다 (여러 터미널에 연결할 수 있는 Emacs 23에서는 더 이상 유용하지 않음).
sessionname emacs
source 0.screenrc
screen -t emacs emacs -nw
다음은 이러한 세션을 호출하는 데 사용하는 스크립트의 수정된 버전입니다. scr emacs
위에 표시된 세션을 선택하려면 예를 들어 이를 호출하세요 . 세션 이름에 해당하는 구성 파일이 없으면 ~/etc/screen
쉘을 실행합니다.
#!/bin/sh
session_name=$1; shift
if [ -r "$HOME/etc/screen/$session_name.screenrc" ]; then
exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/$session_name.screenrc" "$@"
else
if [ $# -eq 0 ]; then set "$SHELL"; fi
exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/0.screenrc" "$@"
fi