박하 창의 제목을 변경하는 방법?


35

MinTTY는 Cygwin의 새로운 기본 콘솔입니다.

MinTTY 창의 제목을 변경하는 쉘 명령 (.bashrc 또는 .zshrc에 더 좋을 수있는 것)은 무엇입니까?

창의 제목을 현재 디렉토리의 경로로 만들고 콘솔 내부에서 디렉토리를 전환 할 때 업데이트되도록하고 싶습니다.


1
Cygwin의 기본 프롬프트 설정 (예 $PS1:)에는 창 제목을 user @ machine : working_directory로 설정하는 제어 시퀀스가 ​​이미 포함되어 있습니다.
ak2

최근 MSYS2_packages / filesystem commit 6e6310d (파일 시스템 : 새로운 특정 변수 MSYS2_PS1., 2016-05-01)는 MSYS2_PS1 프롬프트 스크립트를 도입하여 고유 한 Cygwin / MSYS2 구성을 허용합니다. 기존 PS1이 중간 우선 순위 github.com/Alexpux/MSYS2-packages/pull/651 을 갖도록 조정을 제안했습니다 . 이것이 도움이되기를 바랍니다.
Philip Oakley

@Philip, (자기 노트) 그 조정은 논쟁의 여지가 있으며 다른 사용법을 다루는 최소한의 가능한 수정을 만들기 위해 추가 조정이 추가되거나 제거되고 있습니다.
Philip Oakley

1
"Cygwin i686" 또는 "Cygwin x86_64" 와 같은 정적 제목 만 필요한 경우 -T <title>Windows 바로 가기 속성에서 사용할 수 있습니다 . 도 참조하십시오 mintty man page.
jww

답변:


50

뭐가 잘못 되었 니

다음 명령이 작동하지 않았습니다.

echo -ne "\e]0;MYTITLE\a"

기본 Cygwin 설치에는 .bashrc에 다음과 같은 프롬프트 정의가 포함되어 있습니다.

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$

프롬프트의 첫 번째 부분 ( \e]0;\w\a)은 프롬프트가 나타날 때마다 창 제목을 설정합니다.

해결책

.bashrc두 개의 함수를 정의하는 다음 행을 추가하십시오 .

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}
function settitlepath() {
      export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}

그런 다음이 명령으로 사용자 정의 제목을 설정할 수 있습니다.

settitle "MYWonderfullTest here"

또는 다음 명령을 사용하여 cygwin의 기본값 (현재 경로)으로 되돌릴 수 있습니다.

settitlepath

이것이 도움이되기를 바랍니다.


1
대부분의 사용자가 기본 cygwin 설정을 사용하게 될 PS1 문제를 해결하는 데 도움이됩니다.
Markku K.

3
이것은 최고 투표 답변과는 완전히 다른 방식으로 답변으로 받아 들여졌어야합니다.
Tapan Chandra

1
나는 잘라서 붙여 넣을 수있는 대답을 좋아합니다. 또한 문제가 실제로 무엇인지 명확하게 설명합니다.
Darrel Lee

그 기능은 저에게 잘 작동합니다! cygwin에서 .bashrc를 다시로드하려면 cygwin을 다시 source ~/.bashrc시작해야합니다. Cygwin version 2.8.1 (64 bit)
-2017

이 답변이 왜 받아 들여지지 않았습니까?
asmith

26

이를 위해 xterm 제어 순서를 사용하여 변경할 수 있습니다.

echo -ne '\e]0;Title\a'

참조 : http://code.google.com/p/mintty/issues/detail?id=241


4
나에게 아무런 영향을 미치지 않습니다.
voltrevo

bash를 사용하고 있습니까?
James Fu

2
화면 내에서 발행해도 효과가 없습니다.
Ярослав Рахматуллин

10
아마도 문제는 명령 프롬프트가 제목을 업데이트하도록 이미 구성되어 있기 때문에 (현재 경로로 예를 들어) 명령이 작동하지만 프롬프트에 의해 갑자기 무시되는 것입니다.
Andrea Polci

2
그것을 테스트하기 위해 "echo -ne '\ e] 0; Title \ a'&& cat". 이 방법을 사용하면 프롬프트가 즉시 재설정되지 않습니다. (그렇다면 다른 답변에 설명 된대로 프로필에서 PS1을 변경할 수 있습니다)
Curtis Yallop

3

이것을 .zshrc에 넣으십시오.

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

함수 settitle의 특수 문자 순서는 MinTTY가 창의 제목을 변경하게합니다.

zsh 에서는 특수 이름이 chpwd 인 함수를 정의하면 각 chdir 다음에 호출됩니다 .

Cygwin 1.7 및 MinTTY가 zsh를 실행하는 WinXP에서 작동합니다.


또한 (물론 뺀 cygpath 물건) WSL에서 작동 : settitle "$(pwd)@$HOST"
zzxyz

2

bash에서 변수 PROMPT_COMMAND는 세미콜론으로 구분 된 여러 명령을 보유하도록 설정할 수 있습니다. 이를 사용하여 zsh에 대해 말하는 다른 응답에서 설명한 것과 동일한 제목 설정을 수행 할 수 있습니다.


2
1) $ PS1을 반향하여 해당 문자열을 클립 보드 또는 텍스트 편집기로 복사하십시오.
   에코 $ PS1
2) ~ / .bash_profile을 편집하고 필요에 따라 $ PS1을 바꾸고 아래에 쉘 코드를 추가하되 $ {TERMINAL_TITLE} 변수를 "false"조건으로 유지하십시오.
3) 파일을 저장하고 다음과 같이 TERMINAL_TILE 환경 변수를 설정하십시오
   TERMINAL_TITLE = "내 맞춤 제목"내보내기
4) bash 프로파일을 다음과 같이 소싱하십시오.
   . ~ / .bash_profile
즐겨

[-z "$ {TERMINAL_TITLE}"] 인 경우
그때
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
그밖에
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi

1

Leonel의 대답을 사용했지만이 작업을 수행 할 때 제목 만 깜박이는 것을 발견했습니다. 즉, 적어도 echo 명령이 의도 한대로 작동한다는 것을 의미합니다. 디버그 모드를 사용하여 zsh를 대화식으로 실행했습니다.

zsh -xv

디렉토리를 변경하면 title()after precmd()및 이라는 다른 함수를 호출 하여 chpwd()효과적으로 재정의합니다. 그래서 이것을 내 .zshrc에 꽂았습니다.

function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}

당신이 사용하려는 경우 chpwd()또는 precmd()대신, 단순히 제목 기능을 해제합니다 title(){}.


1

박하를 사용하여 스크립트를 실행할 때 내 솔루션을 공유하고 싶었습니다.

내 민트 바로 가기는 다음과 같이 설정됩니다.

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

위의 바로 가기에서 호출되어 내가 쓴 있다는 connect.sh 스크립트는 내가 연결하려는 서버 나 메시지를 표시합니다 스크립트에 정의 된 setTitle이라는 기능을 실행합니다.

connect.sh

#!/bin/bash

echo "Enter servername when prompted"
echo -n "servername: " 
read servername
function settitle() {
    echo -ne "\033]2;"$servername"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername

함수를 title사용하지 않으면 왜 함수를 정의 합니까?
pabouk

0

이것을 .bash_profile에 추가하십시오

export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/~}\007"'

그것은 나를 위해 작동합니다.


2
문제는 명령 프롬프트가 아닌 창 제목 변경에 관한 것입니다.
kenorb

1
이것을 .bash_profile에 추가하십시오. 제목 변경해도 좋습니다. 감사합니다!
netawater
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.