다음 이전 차례

2. 배쉬와 배쉬 프롬프트

2.1 배쉬란 무엇인가

Bourne Shell로 부터 전승된, 배쉬는 GNU 프로젝트인 "Bourne Again SHell"이며, 대부분의 리눅스 기계에서의 표준적인 명령어 라인 인터페이스입니다. 이것은 상호연결성에서, 그리고 명령어 라인 편집, 완료, 재실행을 지원하는데 탁월합니다. 배쉬는 또한, 형성가능 프롬프트를 지원합니다-많은 사람들이 이점을 인식하고는 있지만 아주 많은 것이 가능하다는 사실을 모르고 있읍니다.

2.2 배쉬를 잡아 비틀어서 무엇을 하게 할 것인가

대부분의 리눅스 시스템은 단색(일반적으로 회색)의 디폴트 프롬프트를 가지고 있어, 사용자 명, 작업하고있는 기계의 이름, 그리고 현재의 작업 디랙토리등을 표시합니다. 이것이 유용한 정보의 전부이지만, 프롬프트로 훨씬 많은 것을 할 수 있읍니다: 모든 종류의 정보(tty번호, 시간, 날짜, 부하, 사용자의 수, 걸린 시간...)를 표시 할 수 있으며, 프롬프트는 ANSI 색을 사용할 수 있어서 재미있게 보이거나, 어떤 정보 는 돋보이게 할 수 있읍니다. 또한 X텀의 제목 표시줄을 조정할 수 있어서 이들 정보 중 몇 개를 반영할 수 있도록 합니다.

2.3 고민은 그만하시오

시스템 정보의 자취를 유지하는 것은 종종 유용한 경우가 많읍니다. 몇몇의 사람들 에게 호소력 있게 보이는, 제가 아는 아이디어 중 하나는, 각각의 서로 다른 기계 마다 다른 색깔의 프롬프트를 유지하도록 할 수 있다는 것 입니다. 만약 몇 개의 다른 기계에서 X텀들을 열고 있다거나, 또는 작업 중인 기계가 어느 기계인지 잊어버려서 엉뚱한 파일들을 지워 버리는 경향이 있다면, 이 방법은 현재 작업 중인 기계를 상기 시키는데 있어서 매우 현명한 방법이라는 것을 알게 될 것입니다.

2.4 첫번째

프롬프트의 생김새는 PS1 쉘 변수로 제어합니다. 명령의 계속은 PS2 쉘 변수에 의해 지정되는데, 이것은 여기서 논의되는 바와 꼭 같은 방법으로 수정할 수 있읍니다- -PS2를 조정하는 것은 정확하게 똑같은 방법이라서, 그렇게 흥미롭지 않으므로 PS1 쉘 변수를 대부분 수정할 것입니다(일반 사용자들은 본적이 없는 PS3, PS4 쉘 변수도 있읍니다-이것들의 사용에 흥미가 있으신 분들은 배쉬 메뉴얼 페이지를 참고 하세요). 프롬프트를 다르게 보이도록 하기 위해서, PS1 쉘 변수를 바꾸면 됩니다. 실험적으로, 현재의 프롬프트에서 직접 PS1 변수를 입력해서 당장 그 결과를 보실 수 있읍니다.(이것은 현재의 쎄션에서만 효력이 있고 로그 아웃하게 되면 사라지게 됩니다). 바뀐 프롬프트를 영구적으로 유지할려고 한다면, ' /.bashrc' 파일을 수정 하여, 그곳에 PS1의 새로운 정의를 첨가하도록 하십시오. 만약 루트의 권한을 갖고 계시다면 '/etc/profile'이라는 파일을 찾아 "PS1=" 라인을 수정할 수 있읍니다. 몇몇의 배포본(적어도 RedHat 5.1)에서는 '/etc/bashrc'파일이 PS1, PS2 쉘 변수를 무효화 시킨다는 점을 주의 하십시오.

시작하기 전에, PS1 변수는 다른 환경 변수들과 마찬가지로 환경변수 기억 장소에 저장되어 있다는 것을 명심해야 합니다. 명령어 라인에서 PS1을 수정하게되면, 당장 프롬프트가 바뀌게 됩니다. 어떠한 변경을 가하기 전에, 또다른 환경변수에 현재의 프롬프트를 저장할 수 있읍니다.

[giles@nikola giles]$ SAVE=$PS1
[giles@nikola giles]$ 

가장 간단한 프롬프트는 다음과 같이, 하나의 문자로 될 것이죠.

[giles@nikola giles]$ PS1=$
$ ls
bin   mail
$

명령어 라인에서 입력함으로써, 기본적인 프롬프트에 대한 실험의 최상의 방법을 설명합니다. 사용자가 입력한 문장은 프롬프트의 바로 뒤에 나타난다는 점을 주목 하십시오: 저는 아래와 같이 사용하기를 더 좋아 합니다.

$PS1="$ "
$ ls
bin   mail
$ 

이것은 프롬프트 뒤에 공백을 두어서, 더 읽기 쉽도록 합니다. 원래의 프롬프트로 복귀하기 위해서는, 단지 저장하였던 변수를 부르기만 하면 됩니다.

$ PS1=$SAVE
[giles@nikola giles]$

2.5 배쉬 이스케잎 시퀀스(escape sequence)

배쉬 쉘에서는 프롬프트에 삽입하기 위해서 많은 이스케잎 시퀀스가 제공됩니다. 배쉬2.02 메뉴얼 페이지로 부터:

상호적으로 실행할 때, 배쉬는 명령을 받아들일 준비가 되면 기본 프롬프트 PS1을 표시하고, 명령어를 완성하기 위해 더 많은 입력이 요구될 때는 두번째 프롬프트인 PS2를 나타냅니다. 배쉬에서는 이들 프롬프트 변수들이 backslash(\)와 하나의 문자로 조합된 특수 문자들로 만들어지도록 하며, 그것들은 아래와 같이 해석 됩니다.

         \a     ASCII 종소리 문자(07)
         \d     "요일  달  날짜" 형식의 날짜 표시
               (예 : "Tue May 26")
         \e     ASCII의 escape 문자 (033)
         \h     첫번째 "." 까지의 hostname
         \H     hostname
         \n     새로운 줄(줄 바꾸기)
         \r     carrage return
         \s     쉘의 이름, $0 의 basename
               (마지막 slash의 다음에 따라오는 부분)
         \t     24-시간으로 현재 시각, HH:MM:SS(시:분:초) 형식 
         \T     12-시간으로 현재 시각, HH:MM:SS(시:분:초) 형식 
         \@     12-시간으로 현재 시각, 오전/오후 형식 
         \u     현재 사용자의 username
         \v     bash의 버전(예: 2.00)
         \V     bash의 배포, 버전 + 패치수준
               (예 : 2.00.0)
         \w     현재 작업 디랙토리 
         \W     현재 작업 디랙토리의 basename
         \!     현재 명령어의 history 번호 
         \#     현재 명령어의 command 번호 
         \$     유효한 UID가 0 이면 # 를, 그렇지 않으면 $ 을 표시 
         \nnn   8 진수 nnn에 해당하는 문자 
         \\     backslash
         \[     터미널 조정 sequence를 프롬프트에 끼워 넣기 위해 
               사용될 수 있는 non-printing 문자의 시작
         \]     non-printing 문자의 끝 

떠났던 곳에서 계속해서 :

[giles@nikola giles]$ PS1="\u@\h \W> "
giles@nikola giles> ls
bin   mail
giles@nikola giles>

이것은 대부분의 배포본에서의 디폴트와 유사합니다. 저는 약간 다르게 보이기를 원해서 이렇게 바꾸었읍니다:

giles@nikola giles> PS1="[\t][\u@\h:\w]\$ "
[21:52:01][giles@nikola:~]$ ls
bin   mail
[21:52:15][giles@nikola:~]$ 

다음 이전 차례