다음 이전 차례

4. X텀 제목 표시줄의 조작

Non-printing 이스케잎 시퀀스들을 사용하여 흥미있는 프롬프트를 생성할 수 있읍니 다. 이들 이스케잎 시퀀스를 사용하기 위해서는, 그것들을 \[ 와 \] 로 둘러 쌀 필요 가 있는데, 그렇게 함으로써 배쉬가 프롬프트의 길이를 계산할 때 그것들을 무시하도 록 할 수 있읍니다. 이들 구획 문자들을 빠뜨리게 되면 프롬프트의 실제 길이를 알 수 없게 되기 때문에, 커서가 엉뚱한 곳에 나타나게 됩니다. 또한, 이스케잎 시퀀스들의 앞에는 배쉬버전 2 이전의 경우에는 \033[, 그 이후의 버전인 경우에는 \033[ 이거나 \e[ 이 선행 되어야만 합니다.

콘솔에서, 프롬프트를 써서 X텀의 제목표시줄을 변경하고자 할 경우에는, 프롬프트에 잡동사니들이 나타나게 됩니다. 이것을 피하기 위해서, 프롬프트가 X텀에 있게 될 것이라는 것을 배쉬에게 일러 주기위해 TERM 환경변수를 테스트해 보십시오.

function proml
{
case $TERM in
    xterm*)
        local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
        ;;
    *)
        local TITLEBAR=''
        ;;
esac

PS1="${TITLEBAR}\
[\$(date +%H%M)]\
[\u@\h:\w]\
\$ "
PS2='> '
PS4='+ '
}

이것은 ' /.bashrc'에 포함될 수 있는 함수의 하나입니다. 함수의 이름을 불러서 실행할 수 있읍니다. PS1문자열과 마찬가지로, 함수도 환경에 저장되어 있읍니다. PS1문자열이 함수에 의해 한번 설정되면, 'unset proml' 명령으로 함수를 환경으로 부터 제거할 수 있읍니다. 프롬프트는 X텀에 있는 것에서 콘솔에 있는 것으로 변경할 수 없기 때문에, TERM 변수는 프롬프트가 생성될 때 마다 테스트 되지 않읍 니다. 프롬프트를 정의할 때 연속표시(backslashes'\')들을 사용하여, 여러 줄에 걸쳐 그것을 할 수 있읍니다. 이런 방법이 더 읽기 쉽게 해주며, 수정하거나 디버거 시에 유리합니다.

저는 이것을 함수로서 정의하는데, 배쉬프롬프트 패키지(이문서의 후반에서 논의함)가 프롬프트들을 다루는 방법이기 때문입니다:유일한 방법은 아니지만, 잘 작동합니다. 사용하는 프롬프트가 더 복잡해짐에 따라, 그것들을 프롬프트에 타이프하는 것이 더욱 더 성가시게 되므로, 그것들을 텍스트 파일에다 만들어 놓는 것이 더 실용적입 니다. 이 경우에 있어서, 프롬프트에서 테스트하기 위해, "proml"이라는 텍스트 파일에 저장하십시오. 아래와 같이 작업을 할 수 있읍니다.

[giles@nikola:/bin (4.498 Mb)]$ cd          -> 프롬프트를 저장하고자 하는 
                                               디랙토리로 이동
[giles@nikola:~ (0 Mb)]$ vi proml           -> 프롬프트 파일을 작성함
...                                         -> 위에 주어진 내용을 입력함
[giles@nikola:~ (0 Mb)]$ source proml       -> 프롬프트 함수를 읽어 들임
[giles@nikola:~ (0 Mb)]$ proml              -> 프롬프트 함수를 실행

이 프롬프트를 생성하는 데 있어서 첫번째 스텝은, 우리들이 시작하는 쉘이 X텀인지 아닌지를 테스트합니다:만약 그렇다면, 쉘 변수 (${TITLEBAR})가 정의됩니다. 그것은 적당한 이스케잎 시퀀스들과 X텀 제목표시줄에 <사용자>@<기계>:<작업 디랙 토리>를 표시하는 \u@\h:\w 로 구성됩니다. 이것은 특별히 최소화된 X텀들에서 유용하고, 더욱 신속하게 터미널을 확인하도록 해 줍니다. 이 프롬프트에 있는 다른 것들은 우리가 이전에 만들었던 것들과 유사할 것입니다.

이런 식으로 X텀 제목표시줄을 조작하는 데 있어 단 하나의 약점은, 제목표시줄 hack를 설정하지 않은 시스템으로 로그인해 들어 갈 때 나타납니다:X텀은 제목 표시줄 hack 가 위치하는 이전 시스템으로 부터의 정보를 계속해서 보여 줄 것입니다.


다음 이전 차례