문제

쉘 스크립트를 사용하여 화면 제목을 설정할 수 있습니까?

나는 주요 명령을 보내는 것과 같은 것에 대해 생각했습니다 Ctrl 키+ 옮기다- Name 입력하다

쉘 스크립트에서 키 스트로크를 모방하는 방법에 대해 약 1 시간 동안 검색했지만 답을 찾지 못했습니다.

도움이 되었습니까?

해결책

다음 줄을 사용하여 화면 / xterm 제목을 설정할 수 있습니다.

#!/bin/bash

mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'

업데이트] - 요청에 따라 아래 @espo가 제안한 솔루션도 포함합니다.

Xterm 버전 또는 Linux 배포에 따라 위의 줄은 작동하거나 작동하지 않을 수 있으며 Xterm-Defaults를 사용해 볼 수 있습니다.

#!/bin/bash

mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'

자세한 내용은 다음을 참조하십시오. http://www.faqs.org/docs/linux-mini/xterm-title.html#s3 또는 아래 @espo의 답변을 참조하십시오.

다른 팁

에서 http://www.faqs.org/docs/linux-mini/xterm-title.html#s3

xterm 이스케이프 시퀀스

Xterme Escape 시퀀스를 사용하여 Window 및 Icon 제목을 실행중인 Xterm에서 변경할 수 있습니다. 다음 시퀀스는 이와 관련하여 유용합니다.

  • ESC]0;stringBEL - 아이콘 이름과 창 제목을 문자열로 설정합니다
  • ESC]1;stringBEL - 아이콘 이름을 문자열로 설정합니다
  • ESC]2;stringBEL - 윈도우 제목을 문자열로 설정합니다

여기서 ESC는 탈출 문자 ( 033)이고 Bel은 종 문자 ( 007)입니다.

xterm에서 이러한 시퀀스 중 하나를 인쇄하면 창 또는 아이콘 제목이 변경됩니다.

참고 : 이러한 서열은 NXTerm, Color-XTerm 및 RXVT와 같은 대부분의 Xterm 미분에 적용됩니다. 다른 말단 유형은 종종 다른 탈출을 사용합니다. 예제는 부록을 참조하십시오. Xterm Escape 시퀀스의 전체 목록은 Xterm 분포 또는 XTERM.Seq와 함께 제공되는 CTLSeq2.txt 파일을 참조하십시오.

탈출 시퀀스 인쇄

호스트 및 사용자 이름과 같이이 쉘의 수명 내내 일정한 정보를 얻으려면 쉘 RC 파일의 탈출 문자열을 간단히 반영하는 것으로 충분합니다.

    echo -n "\033]0;${USER}@${HOST}\007"

쉘 변수 $ user와 $ host가 올바르게 설정되었다고 가정하면 username@hostname과 같은 제목을 생성해야합니다. 에코에 필요한 옵션은 쉘에 따라 다를 수 있습니다 (아래 예제 참조).

현재 작업 디렉토리와 같이 쉘의 수명 동안 변경 될 수있는 정보를 위해서는이 탈출구가 신속하게 변경 될 때마다 적용해야합니다. 이렇게하면 문자열이 발행 한 모든 명령으로 업데이트되며 현재 작업 디렉토리, 사용자 이름, 호스트 이름 등과 같은 정보를 추적 할 수 있습니다. 일부 쉘은이 목적을위한 특수 기능을 제공하며 일부는 그렇지 않으며 제목 시퀀스를 삽입해야합니다. 프롬프트 문자열로 직접. 이것은 다음 섹션에 설명되어 있습니다.

다음은 화면 타이틀의 이름 바꾸기를 스크립팅하는 다른 방법입니다.

다음 설정을 추가합니다 .ssh/config SSH를 사용하여 시스템에 로그인 할 때 화면 제목을 자동으로 설정합니다.

Host *
  PermitLocalCommand yes
  LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

대신에 %h, 연결중인 컴퓨터의 호스트 이름을 나타내는 경우 %n, 이것은 기계에 연결하는 데 사용한 실제 이름 / 별명입니다.

참고 : localhost %n 및 %h 매개 변수를 사용할 수 있으려면 OpenSsh> = v5.1이 필요합니다. LocalCommand에 대한 자세한 내용은 'man ssh_config'를 확인하십시오.

제목을 자동으로 로컬 호스트의 호스트 이름의 이름으로 되돌려 보려면 SSH 세션을 닫은 후 Prompt Variable에 이스케이프 시퀀스를 추가 할 수 있습니다. PS1 안에 .bashrc :

export PS1='you_favorite_PS1_here'
if [ "$TERM" == 'screen' ]; then
    export PS1=${PS1}'\[\033k\h\033\\\]'
fi

이 트릭은 a를 사용할 때 특히 유용합니다 .screenrc 현재 작동중인 화면 '탭'에 표시되는 구성. 다음과 같은 것을 추가하십시오 .screenrc 이 작업을 수행하려면 :

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"

아래 명령을 시도해보십시오. ~/.bashrc와 같은 파일이나 구성을 편집 할 필요가 없습니다. 런타임에 사용할 수 있습니다.

정적 텍스트 설정 제목 : (내 제목)

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

로컬/글로벌 변수 설정 제목 : ($ user)

export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

명령 출력 설정 제목 : (hostname)

export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

기본값으로 설정 (다시 되돌아) :

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}

화면에 전화하여 제목을 설정하도록 지시 할 수도 있습니다.

screen -X title "new title"

화면 창에 있다면 해당 창의 이름을 설정합니다. 화면에 있지 않으면 가장 최근에 열린 Window의 이름이 설정됩니다.

ESPO의 답변에 추가하기 위해 Xterm Escape 시퀀스를 Bash에도 적용 할 수 있습니다. PS1 변하기 쉬운

ESC]0;stringBEL -- Set icon name and window title to string
ESC]1;stringBEL -- Set icon name to string
ESC]2;stringBEL -- Set window title to string

예시

PS1='\e]0;string\a'

SSH로 점프 할 때 자동 제목 업데이트를 활성화하려면 다음에 추가하십시오. ~/.bashrc:

ssh() {
  echo -n -e "\033k$1\033\\"
  /usr/bin/ssh "$@"
  echo -n -e "\033k`hostname -s`\033\\"
}
echo -n -e "\033k`hostname -s`\033\\"

보다 http://linuxepiphany.blogspot.com.ar/2010/05/good-screenrc-config-setup.html

 # add the following in your ~/.bashrc or ~/.bash_profile
 PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

또는 많은 호스트간에 배쉬 구성을 사용자 정의하기위한 전체 개념을 더 잘 복사하십시오. 여기

이 문제에 대한 나의 해결책은 bash 스크립트를 만들고 내 ~/.bashrc 파일에 추가하는 것이 었습니다.

set-title() {
  ORIG==$PS1
  TITLE="\e];$@\a"
  PS1=${ORIG}${TITLE}
}

이제 Bash Shell 세션에있을 때는 "Settitle 원하는 _title"을 입력하고 "원하는 제목"으로 변경됩니다. 이것은 현재 Kinetic 16.04에있는 Ubuntu의 여러 버전에서 작동합니다.

나는이 솔루션을 얻었다 여기. 나는 그것을 다시 찾고 있었고, 그것을 찾을 수 없었고, 관심있는 사람을 위해 여기에 게시 할 것이라고 생각했다.

@flurin-arner와 같은 다른 사람들과 실험 하면서이 솔루션을 얻었습니다 @Weston-Ganger를 시작했습니다. 세트 타이틀 (). 나는 또한 @imgx64를 사용했습니다 프롬프트 _dirtrim 제안. 나는 또한 @itseranga를 사용하고 있습니다 git 브랜치 프롬프트, 이것은 질문과 관련이 없지만 프롬프트로 무엇을 할 수 있는지 보여줍니다.

먼저 Weston 이상에서 볼 수 있듯이

 TITLE="\[\e]2;$*\a\]"

터미널 제목을 수동으로 설정하는 데 사용할 수 있습니다. "$*"는 CommandLine 입력이지만 원하는 것은 아닙니다.

언급 한 바와 같이, 나는 또한 질문의 일부가 아닌 내 프롬프트에 git 브랜치를 내 프롬프트에 추가합니다.

export PROMPT_DIRTRIM=3
parse_git_branch() {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
     }

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

세 번째, 실험에 의해 위의 제목 코드를 복사하고 $*를 고정 문자열로 설정하고 이것을 시도했습니다.

see: \[\e]2;'SomeTitleString'\a\]

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "

이것은 원하는 효과가있었습니다! 궁극적으로, 나는 기본 경로를 제목으로 원했습니다.PS1 매개 변수 w가 기본 경로이므로 내 솔루션은 다음과 같습니다.

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "

git 지점없이 :

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "

git-branch로 프롬프트가 발생합니다.

user@host ~/.../StudyJava (master) $  

parse_git_branch없이 프롬프트가 발생합니다.

   user@host ~/.../StudyJava $  

PWD가주는 곳

/home/user/somedir1/otherdir2/StudyJava

그리고 터미널 제목

StudyJava

참고 : 위의 @Seff에서 나는 "내 제목"을 " w"로 대체하고 있습니다.

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top