
이건 좀 후속작이네이 질문. 나는 일하고있다tcshGNU 내에서화면에xterm.
내 .cshrc에 다음이 있습니다.
alias res_t 'xtset -t %h:%d "(%u:%g)" %e' # reset titlebar
res_t # reset title right now
alias precmd res_t
그리고 이것은 잘 작동합니다!
그러나 screen을 실행하면 제목이 현재 디렉토리로 업데이트되지 않는 것을 볼 수 있습니다. xterm 제목을 화면 업데이트하려면 어떻게 해야 합니까?
답변1
이것을 .tcshrc
또는 .cshrc
(현재 precmd
별칭 교체)에 추가하여 xterm 창 제목을 설정할 수 있습니다.
alias precmd 'echo -n "\033]0;${PWD}\a"'
이것을 사용할 때 이것이 .cshrc
및 파일의 유일한 precmd 별칭인지 확인하십시오. .tcshrc
이 방법은 GNU 화면 세션이 열려 있는지 여부에 관계없이 xterm과 gnome 터미널 모두에서 현재 디렉토리를 창 제목으로 표시합니다.
내 대답은 다음을 기반으로했습니다.이것.
답변2
이것은 모든 쉘에서 작동하지만 더러운 .screenrc 해킹입니다. 일부 사용자에게는 허용되지 않을 수 있는 작업이 hardstatus 라인을 대신합니다. 그러나 그것은 작동합니다그놈 터미널최신 우분투에서는텀캡인포아래 줄. 일부 상황에서는 더 깊은 조정이 필요할 수 있습니다(예를 들어 PuTTY에서는 테스트하지 않았습니다).
# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off
# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'
다음에서 발견됨이 링크.
답변3
나는 당신이 tcsh를 사용하고 있다는 것을 이해하므로 아마도 작동하지 않을 것입니다 ... 누군가가 이것을 수행하는 bash 방법을 찾고 있는 경우를 대비하여.
시스템(로컬/원격)이 bash를 실행 중인 경우 "PROMPT_COMMAND" 환경 변수를 사용하여 창 제목을 설정할 수 있습니다. PROMPT_COMMAND는 프롬프트가 표시되기 전에 평가됩니다.
(.bashrc에서):
export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
설명:
'history -a'
이는 전체 셸이 완료될 때가 아니라 명령이 완료될 때마다 기록 파일에 추가하도록 셸을 설정합니다. (이 예는 이 예와 관련이 없습니다.)
'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
이는 이스케이프 코드 "\033]0;"을 에코합니다. "user" @ "host" 변수(오른쪽에서 첫 번째 "."까지 가장 긴 일치 항목 제거)로 창 제목을 설정한 다음 작업 디렉터리('$HOME'을 '~'로 대체)를 설정합니다.
위의 트릭은 창 제목의 동적 변경을 지원하는 모든 터미널 응용 프로그램(iTerm, Terminal.app, urxvt, aterm, eTerm.xterm 등 모두 가능)에서 작동합니다. Bash 문서에서 쉘 변수 "TITLEBAR"를 살펴볼 수도 있습니다. 이는 비슷합니다.
답변4
이 페이지(위에 링크되어 있음)이 해결책입니다.항목의 터미널 문자열이 터미널의 ID 문자열과 일치하는지 확인해야 합니다.(즉, TERM 변수가 무엇으로 설정되어 있는지) 그렇지 않으면 아무런 효과가 없습니다.
다음은 이 문제를 파악하는 데 충분한 시간을 투자하지 않은 이후 몇 년 동안 제가 한 일에 대한 요약입니다.
다음을 실행하여 터미널의 ID 문자열이 무엇인지 알아보세요.
echo $TERM
아마도 'xterm', 'linux' 또는 'rxvt'와 같은 내용이 표시될 것입니다.
이제 homedir(~/.screenrc)에 있는 .screenrc 파일에 다음 줄을 추가합니다(또는 파일이 없으면 새로 만듭니다).
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
핵심은 'xterm'이 위에서 얻은 TERM의 ID 문자열인지 확인하는 것입니다. 사용하는 각 용어 유형에 대해 여러 줄을 작성할 수 있습니다.
예를 들어 SSH를 상자에 넣을 때 xterms와 'linux' 용어 유형을 모두 사용하기 때문에 이것을 .screenrc 파일로 가지고 있습니다.
termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
이것이 도움이 되기를 바라며 완전히 쉘에 구애받지 않습니다. 루트로 screen을 실행하는 경우 이와 같이 자신의 ~/.screenrc 파일 외에 ~root/.screenrc를 수정해야 한다는 점을 기억하십시오.