Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash Shell PS1:Angelina Jolie처럼 Linux 프롬프트를 만드는 10가지 예

Bash Shell PS1:Angelina Jolie처럼 Linux 프롬프트를 만드는 10가지 예사진 제공:f1r3storm85

이전 기사에서 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.