장기 실행 프로세스 등을 실행하기 위해 SSH를 통해 액세스되는 원격 시스템에서 screen(문제가 있는 이름의 터미널 세션 관리자)을 사용하고 있습니다. 결국 SSH를 통해 먼저 로그인한 다음 화면을 시작하는 대신 명령을 사용하여 화면 세션에 직접 연결하기 시작했습니다.
ssh -t hostname screen -xRR
목적은 -xRR
사용 가능한 경우 기존 화면 세션에 연결하고, 그렇지 않으면 새 세션을 만드는 것입니다. 문제는 새 세션이 생성될 때 로그인 셸로 생성되지 않는다는 것입니다.
$ shopt -q login_shell; echo $?
1
따라서 .profile
SSH를 사용하여 처음 로그인한 후 실행하는 것과 비교하면 로그인 세션 설정(실행 및 친구)이 완료되지 않고 설정의 일부가 손실됩니다. screen
이 경우 SSH가 시작된 셸은 로그인 셸이었고 올바르게 설정되었으며 화면이 상속된 환경인 것 같습니다.
"로그인 모드"로 문서화된 화면 플래그를 사용해 보았지만 -l
도움이 되지 않았습니다. who
.
화면에서 로그인 셸을 실행하는 방법을 아시나요?
답변1
GNU 매뉴얼 페이지에서 screen
:
-에스프로그램
$SHELL
기본 셸을 환경 변수 (/bin/sh
또는 정의되지 않은 경우 "") 의 값이 아닌 지정된 프로그램으로 설정합니다 . 이는shell
" ".screenrc 명령을 통해 정의 할 수도 있습니다 .
...
껍데기주문하다
새 셸을 만드는 데 사용되는 명령을 설정합니다. 이는 환경 변수의 값을 덮어씁니다
$SHELL
. 이것은 tty 부스터를 실행하고 에 지정된 프로그램이 실행되기를 기대하는 경우에 유용합니다$SHELL
.명령이 "-" 문자로 시작하면 쉘은 로그인 쉘로 시작됩니다. 로그인 쉘로 시작되지 않은 경우 일반적인 쉘은 최소한의 초기화만 수행합니다. 예를 들어~/.bashrc
Bash는 로그인 셸이 아닌 이상 정보를 읽지 않습니다.
defshell
현재 .screenrc 명령의 동의어입니다shell
.
따라서 두 가지 옵션이 있습니다.
다음 명령을 실행하여
bash
로그인 셸로 시작하는지 확인하세요.ssh -t hostname screen -xRR -s -bash
이 동작을 기본값으로 설정하려면
$HOME/.screenrc
대상 호스트(또는screen
명령이 실행되는 위치)의 파일에 다음 줄을 추가하세요.shell -bash