이전 기사에서 Linux 환경 변수 PS[1-4] 및 PROMPT_COMMAND에 대해 논의했습니다. 효과적으로 사용하면 PS1은 명령 프롬프트에서 바로 귀중한 정보를 제공할 수 있습니다.
Tomb Raider에서 Angelina Jolie는 미스터리를 스타일리시하게 풀기 위해 손끝에 모든 도구와 무기를 가지고 있습니다. Angelina Jolie의 가제트와 스타일은 일치시키기 어렵지만 적어도 이 기사에서 제공하는 10가지 예제를 사용하여 오래된 Linux 프롬프트를 매우 기능적이고 세련되게 만들도록 합시다.
1. 프롬프트에 사용자 이름, 호스트 이름 및 현재 작업 디렉토리 표시
이 예의 PS1은 프롬프트에 다음 세 가지 정보를 표시합니다.
- \u – 사용자 이름
- \h – 호스트 이름
- \w – 현재 작업 디렉토리의 전체 경로
-bash-3.2$ export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
2. 프롬프트에 현재 시간 표시
PS1 환경 변수에서 $(linux_command) 형식으로 지정하여 모든 Linux 명령을 직접 실행할 수 있습니다. 다음 예에서는 $(date) 명령을 실행하여 프롬프트 내부에 현재 시간을 표시합니다.
ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "
ramesh@dev-db [11:09:56]>
\t를 사용하여 아래와 같이 현재 시간을 hh:mm:ss 형식으로 표시할 수도 있습니다.
ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>
\@를 사용하여 아래와 같이 오전/오후 12시간 형식으로 현재 시간을 표시할 수도 있습니다.
ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>
3. 프롬프트에 Linux 명령의 출력 표시
프롬프트에서 Linux 명령의 출력을 표시할 수 있습니다. 다음 예는 |로 구분된 세 개의 항목을 표시합니다. (파이프) 명령 프롬프트:
- \!: 명령의 기록 번호
- \h: 호스트 이름
- $kernel_version: $kernel_version 변수에서 uname -r 명령의 출력
- \$?: 마지막 명령의 상태
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>
4. 프롬프트의 전경색 변경
사용자 이름, 호스트 및 현재 디렉토리 정보와 함께 프롬프트를 파란색으로 표시
<센터> 센터>$ export PS1="\e[0;34m\u@\h \w> \e[m" [Note: This is for light blue prompt] $ export PS1="\e[1;34m\u@\h \w> \e[m" [Note: This is for dark blue prompt]
- \e[ – 색상 프롬프트의 시작을 나타냅니다.
- x;ym – 색상 코드를 나타냅니다. 아래에 언급된 색상 코드 값을 사용하세요.
- \e[m – 색상 프롬프트의 끝을 나타냅니다.
색상 코드 표:
Black 0;30 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33 [Note: Replace 0 with 1 for dark color]
.bash_profile 또는 .bashrc
에 다음 행을 추가하여 색상 변경을 영구적으로 만드십시오.STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"
5. 프롬프트의 배경색 변경
아래와 같이 PS1 프롬프트에서 \e[{code}m을 지정하여 배경색을 변경합니다.
$ export PS1="\e[47m\u@\h \w> \e[m"
[Note: This is for Light Gray background]
배경과 전경의 조합
export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[Note: This is for Light Blue foreground and Light Gray background]
.bash_profile 또는 .bashrc에 다음을 추가하여 위의 배경과 전경색을 영구적으로 만듭니다.
STARTFGCOLOR='\e[0;34m'; STARTBGCOLOR="\e[47m" ENDCOLOR="\e[0m" export PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"
다음 배경색을 사용하여 재생하고 취향에 맞는 것을 선택하십시오.
- \e[40m
- \e[41m
- \e[42m
- \e[43m
- \e[44분
- \e[45m
- \e[46m
- \e[47m
6. 프롬프트에 여러 색상 표시
동일한 프롬프트에 여러 색상을 표시할 수도 있습니다. .bash_profile
에 다음 기능 추가function prompt { local BLUE="\[\033[0;34m\]" local DARK_BLUE="\[\033[1;34m\]" local RED="\[\033[0;31m\]" local DARK_RED="\[\033[1;31m\]" local NO_COLOR="\[\033[0m\]" case $TERM in xterm*|rxvt*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="\u@\h [\t]> " PS1="${TITLEBAR}\ $BLUE\u@\h $RED[\t]>$NO_COLOR " PS2='continue-> ' PS4='$0.$LINENO+ ' }
변경 사항을 적용하려면 다시 로그인하거나 아래와 같이 .bash_profile을 소싱할 수 있습니다.
$. ./.bash_profile $ prompt ramesh@dev-db [13:02:13]>
7. tput을 사용하여 프롬프트 색상 변경
아래와 같이 tput을 사용하여 PS1 프롬프트의 색상을 변경할 수도 있습니다.
$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
tput 색상 기능:
- tput setab [1-7] – ANSI 이스케이프를 사용하여 배경색 설정
- tput setb [1-7] – 배경색 설정
- tput setaf [1-7] – ANSI 이스케이프를 사용하여 전경색 설정
- tput setf [1-7] – 전경색 설정
tput 텍스트 모드 기능:
- 굵게 – 굵은 모드 설정
- 어두움 – 반밝기 모드 켜기
- tput smul – 밑줄 모드 시작
- 입력 rmul – 밑줄 모드 종료
- 입력 회전수 – 역방향 모드 켜기
- smso 입력 – 눈에 띄는 모드로 전환(rxvt에서 굵게 표시)
- rmso 입력 – 눈에 띄는 모드 종료
- sgr0 입력 – 모든 속성 끄기
tput의 색상 코드:
- 0 – 검은색
- 1 – 빨간색
- 2 – 녹색
- 3 – 노란색
- 4 – 파란색
- 5 – 마젠타색
- 6 – 청록색
- 7 – 흰색
8. PS1 변수에 사용 가능한 코드를 사용하여 자신만의 프롬프트를 생성합니다.
다음 코드를 사용하여 기능적이고 취향에 맞는 나만의 PS1 Linux 프롬프트를 만드십시오. 이 목록의 어떤 코드가 일상적인 사용에 매우 도움이 될까요? 의견을 남기고 Linux 프롬프트에 사용한 PS1 코드를 알려주십시오.
- \a ASCII 벨 문자(07)
- \d "요일 월 날짜" 형식의 날짜(예:"5월 26일 화요일")
- \D{형식} – 형식이 strftime(3)에 전달되고 결과가 프롬프트 문자열에 삽입됩니다. 빈 형식은 로케일별 시간 표현을 생성합니다. 중괄호가 필요합니다.
- \e ASCII 이스케이프 문자(033)
- \h 첫 번째 부분까지의 호스트 이름
- \H 호스트 이름
- \j 현재 셸에서 관리하는 작업 수
- \l 셸 터미널 장치 이름의 기본 이름
- \n 줄 바꿈
- \r 캐리지 리턴
- \s 쉘 이름, $0의 기본 이름(마지막 슬래시 다음 부분)
- \t 24시간 HH:MM:SS 형식의 현재 시간
- \T 12시간 HH:MM:SS 형식의 현재 시간
- \@ 오전/오후 12시간 형식의 현재 시간
- \A 24시간 HH:MM 형식의 현재 시간
- \u 현재 사용자의 사용자 이름
- \v bash 버전(예:2.00)
- \V bash 릴리스, 버전 + 패치 수준(예:2.00.0)
- \w $HOME이 물결표로 약칭된 현재 작업 디렉토리
- \W 현재 작업 디렉토리의 기본 이름($HOME은 물결표로 축약됨)
- \! 이 명령의 기록 번호
- \# 이 명령의 명령 번호
- \$ 유효 UID가 0이면 #, 그렇지 않으면 $
- \nnn 8진수 nnn에 해당하는 문자
- \\ 백슬래시
- \[ 터미널 제어 시퀀스를 프롬프트에 포함하는 데 사용할 수 있는 인쇄되지 않는 문자 시퀀스 시작
- \] 인쇄되지 않는 문자 시퀀스 종료
9. PS1 변수 내에서 bash 쉘 기능 사용
아래와 같이 PS1에서 bash 쉘 함수를 호출할 수도 있습니다.
ramesh@dev-db ~> function httpdcount { > ps aux | grep httpd | grep -v grep | wc -l > } ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> " ramesh@dev-db [12]> [Note: This displays the total number of running httpd processes]
.bash_profile 또는 .bashrc에 다음 줄을 추가하여 이 변경 사항을 영구적으로 만들 수 있습니다.
function httpdcount { ps aux | grep httpd | grep -v grep | wc -l } export PS1='\u@\h [`httpdcount`]> '
10. PS1 변수 내에서 쉘 스크립트 사용
PS1 변수 내에서 쉘 스크립트를 호출할 수도 있습니다. 아래 예에서는 현재 디렉토리의 총 파일 크기를 계산하는 ~/bin/totalfilesize.sh가 PS1 변수 내에서 호출됩니다.
ramesh@dev-db ~> cat ~/bin/totalfilesize.sh for filesize in $(ls -l . | grep "^-" | awk '{print $5}') do let totalsize=$totalsize+$filesize done echo -n "$totalsize" ramesh@dev-db ~> export PATH=$PATH:~/bin ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> " ramesh@dev-db [534 bytes]> cd /etc/mail ramesh@dev-db [167997 bytes]>
[Note: This executes the totalfilesize.sh to display the total file size of the current directory in the PS1 prompt]
PS1을 얼마나 커스터마이징 했습니까? PS1이 안젤리나 졸리를 이길 수 있습니까? 댓글을 남기고 PS1을 공유하세요. 프롬프트 값.
권장 도서
Bash Cookbook, Carl Albing, JP Vossen 및 Cameron Newham 작성 . Bash는 매우 강력한 쉘입니다. 이 책은 bash 셸을 마스터하고 생산성을 높이는 데 도움이 될 것입니다. 시스템 관리자든 DBA든 개발자든 어느 시점에서 쉘 스크립트를 작성해야 합니다. 현명한 시스템 관리자는 쉘 스크립팅 기술을 마스터하면 쉘 스크립트가 엉뚱한 작업을 수행하도록 하여 서버를 자동 파일럿 모드로 설정할 수 있다는 것을 알고 있습니다. sysadmin의 자동 조종 모드에 도달하려면 이 요리책에서 제공하는 예제를 반드시 숙달해야 합니다. Bash 쉘 책은 거의 없습니다. 그러나 이 책은 자세한 예제를 많이 제공하여 모든 것을 능가합니다.
추가 Linux 도서 추천:두뇌와 도서관을 풍요롭게 하는 12가지 놀랍고 필수적인 Linux 도서
이 기사가 마음에 들면 del.icio.us에 북마크하고 Stumble it.