프롬프트 문자열을 변경하지 않고 터미널 제목을 어떻게 변경할 수 있습니까?

프롬프트 문자열을 변경하지 않고 터미널 제목을 어떻게 변경할 수 있습니까?

특정 색상과 전체 경로로 현재 디렉터리를 표시하도록 명령 프롬프트를 사용자 정의했습니다. 이제 창 제목을 전체 경로가 아닌 디렉터리 이름으로 설정하고 싶습니다. Korn 쉘에서 이를 달성하는 방법을 알려주실 수 있나요? 감사해요.

답변1

이를 달성하기 위해 제가 찾은 방법은 CD에 대한 별칭을 만드는 것입니다. 다음 코드를 파일에 넣어 .profile트릭을 수행했습니다.

xcd() { cd $*; echo -ne "\033]0;$(basename $PWD)\007"; }
alias cd='xcd'

제가 실제로 찾고 있던 솔루션을 제공해 주신 Kusalananda에게 많은 감사를 드립니다.

cd() { command cd "$@"; echo -ne "\033]0;${PWD##*/}\007"; }

답변2

웹사이트에 따르면:xterm의 제목을 변경하는 방법: 다른 쉘의 예

ksh는 몇 가지 기능과 확장 기능을 제공하므로 동적으로 업데이트하려면 프롬프트에 이스케이프된 문자열을 삽입해야 합니다. 이 예에서는 username@hostname: 디렉토리에 대한 제목과 ksh$ 프롬프트를 생성합니다.

case $TERM in
    xterm*)
        HOST=`hostname`
        PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ '
        ;;
    *)
        PS1='ksh$ '
        ;;
esac

그러나 $PWD는 전체 디렉터리 경로를 생성합니다. ${...##...} 구조를 사용하여 디렉토리에서 $HOME/ 접두사를 제거할 수 있습니다. ${...%%...}를 사용하여 호스트 이름을자를 수도 있습니다.

HOST=`hostname`
HOST=${HOST%%.*}
PS1='^[]0;${USER}@${HOST}: ${PWD##${HOME}/}^Gksh$ '

프롬프트 문자열의 ^[ 및 ^G는 ESC 및 BEL의 단일 문자입니다(Cq ESC 및 Cq Cg를 사용하여 emacs에 입력할 수 있음).

관련 정보