두 가지 상태 사이를 전환하기 위해 Xterm 창 제목을 설정하고 싶습니다:
- 명령이 실행되면 명령 이름을 표시합니다(예: "less")
- 실행 중인 명령이 없으면 현재 경로를 표시합니다(예: "src")
현재 경로를 사용하여 Xterm 창 제목을 만들 수 있습니다.
$ export PROMPT_COMMAND='echo -ne "\033]0;`basename ${PWD}`\007"'
내가 보여줄 수 있어현재 실행 중인 명령trap
문 을 추가하면 다음과 같습니다 .bashrc
.
$ trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
하지만 둘 사이를 자동으로 전환할 수는 없습니다. 가능합니까?
편집하다:@테덴일반 xterm에서 작동하는 솔루션을 보여줍니다. 정말 멋집니다! 하지만 제가 MacOSX Terminal.app을 사용한다는 사실은 언급하지 않았습니다. 명령이 실행되지 않으면 현재 경로 대신 "bash"가 계속 표시되는 것으로 표시됩니다. 좀 만져봐이 문제를 해결하는 방법을 알아냈습니다..
답변1
$BASH_COMMAND
설정되어 있는지 확인하고 설정되어 있지 않으면 CWD를 인쇄하는 기능을 사용하면 가능합니다. 다음 줄을 다음 항목에 추가하세요 ~/.bashrc
.
trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
function show_name(){
if [[ -n "$BASH_COMMAND" ]];
then
echo -en "\033]0;`pwd`\007";
else
echo -en "\033]0;$BASH_COMMAND\007";
fi
}
export PROMPT_COMMAND='show_name'
이렇게 하면 터미널 이름이 현재 실행 중인 명령(있는 경우) 또는 현재 디렉터리(없는 경우)가 됩니다. 명령을 여러 번 실행하는 긴 루프를 실행하면 약간 정신분열적인 터미널이 발생한다는 점을 명심하세요. while true; do echo foo; done
예를 들어 시도해 보세요.
(zsh
원천) 루프를 올바르게 처리합니다.
case $TERM in
xterm*)
preexec () {
print -Pn "\e]0;$*\a"
}
;;
esac
답변2
나는 깨달았다MacOSX Terminal.app에서 .bashrc를 읽을 수 없습니다.. 도움을 받아문자열의 첫 번째 단어를 추출하는 방법약간의 수정을 가해 조정했습니다.@terdon 좋은 답변입니다다음을 추가하십시오 .bash_profile
.
trap 'echo -ne "\033]0;${BASH_COMMAND%% *}\007"' DEBUG
function show_name {
if [[ -n "$BASH_COMMAND" ]]; then
echo -en "\033]0;`basename ${PWD}`\007"
fi
}
export PROMPT_COMMAND='show_name'
바라보다! 그것은 매력처럼 작동합니다.