답변:
당신의 껍질에 달려 있습니다.
이 기사 에서는 여러 가지 방법을 보여줍니다.
개인적으로 각 프롬프트 앞에 실행되는 편리한 precmd () 함수가있는 zsh를 사용합니다.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
다른 질문에는 bash 메소드가 나열되어 있지만, cd에는 별칭이 붙습니다. Bash는 프롬프트를 연결하는 고유 한 방법을 제공합니다.
세게 때리다
bash는 프롬프트 앞에 실행될 명령을 포함하는 PROMPT_COMMAND 변수를 제공합니다. 이 예제 (~ / .bashrc에 삽입 됨)는 제목을 "username @ hostname : directory"로 설정합니다.
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
여기서 \ 033은 ESC의 문자 코드이고 BEL은 \ 007입니다. 인용 부호는 여기에서 중요합니다 : 변수는 "..."로 확장되고 '...'에는 확장되지 않습니다. 따라서 PROMPT_COMMAND는 확장되지 않은 값으로 설정되지만 PROMPT_COMMAND가 사용될 때 "..."안의 변수가 확장됩니다.
그러나 PWD는 전체 디렉터리 경로를 생성합니다. 우리가 '~'단축키를 사용하고자한다면 프롬프트에 escape 문자열을 삽입해야합니다. 그러면 쉘이 제공하는 다음과 같은 프롬프트 확장을 이용할 수 있습니다 :
\u expands to $USERNAME
\h expands to hostname up to first '.'
\w expands to directory, replacing $HOME with '~'
\[...\] embeds a sequence of non-printing characters
따라서 다음은 "bash $"프롬프트와 "username @ hostname : directory"라는 xterm 제목을 생성합니다.
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
프롬프트의 너비를 계산할 때 비 인쇄 제어 문자를 무시하도록 bash에 알려주는 [...]의 사용에 유의하십시오. 그렇지 않으면 커서를 놓는 동안 줄 편집 명령이 혼란스러워집니다.
~/.profile
원격 컴퓨터의 자신의 (또는 동등한) 파일에 넣기 만하면 됩니다.
Mac OS X Lion 10.7에서 Terminal에는 표준 디렉토리 "proxy"아이콘을 사용하여 터미널이 표시하는 작업 디렉토리 설정을위한 명시적인 이스케이프 시퀀스가 있습니다. 이렇게하면 Command- 클릭하여 경로를 보거나 Finder에 표시하거나 다른 폴더처럼 끌 수 있습니다. 또한 터미널은이 명령을 사용하여 동일한 디렉토리에 다른 터미널을 만들고 터미널을 종료 / 다시 시작할 때 (다시 시작이 활성화 된 경우) 작업 디렉터리를 복원 할 수 있습니다. 또한 창 그룹에 대한 디렉토리를 복원 할 수 있습니다.
윈도우 및 탭 제목과 동일한 운영 체제 명령 (OSC) 이스케이프 시퀀스이지만 첫 번째 매개 변수는 7로 설정됩니다.이 값은 백분율 인코딩 특수 문자로 처리 할 수있는 "file :"URL이어야합니다 모든 유효한 경로 이름. 터미널이 로컬 디렉토리인지 여부를 결정할 수 있도록 호스트 이름도 포함시켜야합니다. 터미널은 다른 호스트의 터미널을 현재 작업 디렉토리로 사용하지 않습니다.
관련 노트에서 터미널은 마찬가지로 매개 변수 6을 사용하여 OSC 이스케이프 시퀀스를 사용하여 "표현 된 파일"을 설정하는 것을 지원합니다. 설정하면 프록시 아이콘이 작업 디렉토리 대신이 파일을 표시합니다. 예를 들어, 필자는 이맥스가 있고 프록시 아이콘에 현재 표시된 파일 / 버퍼를 반영하도록 덜 구성되었습니다. 이렇게하면 이러한 tty 기반 프로그램을 주변 OS와보다 통합 할 수 있습니다.
작업 디렉토리 비헤이비어는 기본적으로 bash (Mac OS X의 기본 쉘)에서 사용 가능합니다. 관련 코드는 / etc / bashrc를 참조하십시오.
또한 Lion Terminal이 이제 OSC 이스케이프 시퀀스를 사용하여 창 제목과 별도로 탭 제목을 설정하는 것을 지원한다는 점을 언급 할 필요가 있습니다.
update_terminal_cwd
함수는 프록시 아이콘을 현재 작업 디렉토리로 설정합니다. 기본적으로 $PROMPT_COMMAND
입니다 update_terminal_cwd
.
그렇다 추천에서 당신은 애플 터미널 특정 운영 체제 명령 이스케이프 시퀀스 사용 인 및 A는 URL을; Mac OS X 10.11 (그리고 아마도 10.7 이후)에는 (코멘트가없는) 편리함을 정의 하는 파일 (10.11 이하는 편집 할 수 없음)이 추가 될 가치가 있습니다 .ESC ] Ps ; Pt BEL
Ps
7
Pt
file:
/etc/bashrc_Apple_Terminal
update_terminal_cwd()
update_terminal_cwd ()
{
local url_path='';
{
local i ch hexch LC_CTYPE=C LC_ALL=;
for ((i = 0; i < ${#PWD}; ++i))
do
ch="${PWD:i:1}";
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch";
else
printf -v hexch "%02X" "'$ch";
url_path+="%${hexch: -2:2}";
fi;
done
};
printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}
원격 저장소에서도이 방법을 사용할 수 있습니다. 그렇게하고 싶다면 bash에서 파일 URL을 올바르게 인코딩 할 때 머리를 찰칵 수 있습니다.
그리고 PROMPT_COMMAND
혼자서 바꾸 .bash_profile
거나 .bashrc
전화를하는 것을 잊어 버릴 수도 있습니다. 같은 파일에서 그것들을 조금 더 잘 묶는 예제를 보여줍니다 :
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
개인적으로 .bash_profile
나는 git 프롬프트를 추가하고 싶었 기 때문에 이렇게했다.
local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
if [[ -f "$f" ]]; then
. "$f"
fi
done
get_sha() {
git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
export GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWUPSTREAM="auto git"
export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
디렉토리에 유니 코드 문자가 있다면 PS1과 PROMPT_COMMAND를 포함한 Bash 솔루션은 실패합니다 (적어도 Snow Leopard에서는). 내가 얻을 수있는 최선의 해결책은
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
불행히도 이것은 직접 작동하지 않으므로 대신 쉘 함수를 정의하여 tr
호출 을 수행합니다 .
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
이것은 유니 코드 NFD (악센트는 사라지지만 기본 라틴 문자는 그대로 유지됩니다)에있는 라틴 악센트에서는 잘 작동합니다.
불행하게도, 그것은 중국어 같은 것들에 대해 완전히 실패 할 것입니다.
~ / .profile 또는 이와 동등한 파일에 다음을 입력하십시오.
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
첫 줄에는 복사 / 붙여 넣기가 불가능한 두 개의 특수 문자가 있지만 http://blog.nottoobadsoftware.com/files/setterminaltitle.sh 에서 텍스트를 다운로드 할 수 있습니다 .
echo
use 를 사용 하는 대신 printf
이스케이프 시퀀스로 문자 (ESC 및 BEL / Control-G)를 표현할 수 있습니다 :printf '\e]0;$@\a"