재부팅 시 스크린 세션을 시작하도록 (cron을 통해) 머신을 구성했습니다. 세션은 여러 화면을 열고 그 중 하나에서 서버를 시작합니다. 이 모든 것이 잘 작동합니다. 그러나 로그인하고 스크린 세션을 재개하면 다음 (PS1) 프롬프트가 표시됩니다.
\u@\h [\j] \w\$
터미널 색상도 나타나지 않습니다. 이것은 PS1
bashrc 파일에 명시적으로 설정한 문자열이지만 \u
쉘은 유사한 제어 시퀀스를 해석하지 않습니다. 화면이 시작되기 전에 bashrc 및 구성 파일을 가져왔는지 확인했습니다. cron에서 호출된 스크립트입니다.
#! /bin/bash
# This script initializes screen with a propert environment. It is intended to
# be run from cron.
# source the profile
if [ -r "$HOME/.profile" ]; then source "$HOME/.profile"; fi
if [ -r "$HOME/.bash_profile" ]; then source "$HOME/.bash_profile"; fi
if [ -r "$HOME/.bashrc" ]; then source "$HOME/.bashrc"; fi
exec screen -dmS initscreen
export TERM=screen.xterm-256color
" " 줄과 변형(예: )을 추가해 보았지만 export TERM=xterm-256color
변경되지 않았습니다.
내 가설은 재부팅 시 실제 TTY 없이 화면이 시작되었기 때문에 화면이 내 터미널을 올바르게 해석할 수 없고 결국 터미널 해석 없이 부팅이 끝났다는 것입니다. 화면을 종료하고 ssh 세션에서(재부팅 시 cron 대신) 시작 스크립트를 다시 실행하면 모든 것이 잘 작동합니다. 이러한 터미널 기능이 작동하는 경우 나중에 연결할 수 있도록 재부팅 시 화면을 시작하려면 어떻게 해야 합니까?
미리 감사드립니다.
답변1
\w
in과 같은 마법 문자가 해석되지 않는다는 사실은 PS1
screen에 의해 시작된 쉘이 이와 같지 않다는 것을 의미하는 것 같습니다 . 제가 가지고 있는 시스템을 살펴보니 bash
다음과 같은 줄이 있습니다./bin/sh
/etc/crontab
SHELL=/bin/sh
하지만 다른 배포판에는 가 있으므로 SHELL=/bin/bash
일관된 결과를 보장하기 위해 명시적으로 어딘가에 설정해야 할 수도 있습니다.