Bash
시스템 프롬프트 처리
수색…
통사론
- export PS1 = "something"# bash가 타이핑 할 명령을 기다릴 때 표시합니다.
- export PS2 = "anotherthing"# 문장이 더 많은 줄로 확장 될 때 표시
- export PS3 = "select 문에 대한 질문 프롬프트"# select for seldomly prompt를 사용합니다. 먼저 PS3를 원하는대로 설정 한 다음 선택을 선택하십시오 . 선택 도움말 보기
- export PS4 = "주로 디버깅에 유용하고 라인 번호 등등"# 배쉬 스크립트 디버깅에 사용됩니다.
매개 변수
탈출 | 세부 |
---|---|
\에이 | 벨 문자. |
\디 | "Weekday Month Date"형식의 날짜 (예 : "Tue May 26"). |
\ D {FORMAT} | FORMAT은`strftime '(3)에 전달되고 그 결과는 프롬프트 문자열에 삽입됩니다; 비어있는 FORMAT 결과는 로케일 특정 시간 표현이됩니다. 중괄호가 필요합니다. |
\이자형 | 이스케이프 문자. \ 033도 물론 작동합니다. |
\ h | 호스트 명, 최초의`. '까지. (즉, 도메인 부분 없음) |
\ H | 도메인 부분이있는 호스트 이름 |
\ j | 현재 쉘에 의해 관리되는 작업의 수. |
\엘 | 쉘의 터미널 장치 이름의 기본 이름. |
\엔 | 개행. |
\아르 자형 | 캐리지 리턴. |
\에스 | 쉘의 이름,`$ 0 '의 기본 이름 (최종 슬래시 뒤에 나오는 부분). |
\티 | 시간 (24 시간 HH : MM : SS 형식). |
\티 | 시간 (12 시간 HH : MM : SS 형식). |
@ | 12 시간 am / pm 형식의 시간입니다. |
\에이 | 시간 (24 시간 HH : MM 형식). |
\유 | 현재 사용자의 사용자 이름입니다. |
\V | Bash 버전 (예 : 2.00) |
\V | Bash, version + patchlevel (예 : 2.00.0) |
\ w | $ HOME이 물결표로 축약 된 현재 작업 디렉토리 ($ PROMPT_DIRTRIM 변수 사용). |
\ W | $ PWD의 기본 이름. $ HOME은 물결표로 축약됩니다. |
! | 이 명령의 히스토리 번호. |
# | 이 명령의 명령 번호. |
$ | 유 효한 uid가 0이면 # , 그렇지 않으면 $ . |
\ NNN | ASCII 코드가 8 진수 NNN 인 문자. |
\ | 백 슬래시. |
\ [ | 일련의 인쇄 할 수없는 문자를 시작하십시오. 이 명령을 사용하여 터미널 제어 시퀀스를 프롬프트에 포함시킬 수 있습니다. |
\] | 인쇄 할 수없는 문자 시퀀스를 종료하십시오. |
PROMPT_COMMAND envrionment 변수 사용
대화 형 bash 인스턴스의 마지막 명령이 완료되면 평가 된 PS1 변수가 표시됩니다. 실제로 PS1을 표시하기 전에 bash는 PROMPT_COMMAND가 설정되어 있는지 확인합니다. 이 var의 값은 호출 할 수있는 프로그램이나 스크립트 여야합니다. 이 변수가 설정되면 PS1 프롬프트가 표시되기 전에이 프로그램 / 스크립트가 호출됩니다.
# just a stupid function, we will use to demonstrate
# we check the date if Hour is 12 and Minute is lower than 59
lunchbreak(){
if (( $(date +%H) == 12 && $(date +%M) < 59 )); then
# and print colored \033[ starts the escape sequence
# 5; is blinking attribute
# 2; means bold
# 31 says red
printf "\033[5;1;31mmind the lunch break\033[0m\n";
else
printf "\033[33mstill working...\033[0m\n";
fi;
}
# activating it
export PROMPT_COMMAND=lunchbreak
PS2 사용
명령이 둘 이상의 행으로 확장되고 bash가 더 많은 키 스트로크를 기다릴 때 PS2가 표시됩니다. while ... do..done 과 같은 복합 명령을 입력하면 모두 표시됩니다.
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
PS3 사용
select 문을 실행하면 숫자 앞에 접두사가있는 항목이 표시된 다음 PS3 프롬프트가 표시됩니다.
export PS3=" To choose your language type the preceding number : "
select lang in EN CA FR DE; do
# check input here until valid.
break
done
PS4 사용
PS4는 bash가 디버깅 모드에있을 때 표시됩니다.
#!/usr/bin/env bash
# switch on debugging
set -x
# define a stupid_func
stupid_func(){
echo I am line 1 of stupid_func
echo I am line 2 of stupid_func
}
# setting the PS4 "DEBUG" prompt
export PS4='\nDEBUG level:$SHLVL subshell-level: $BASH_SUBSHELL \nsource-file:${BASH_SOURCE} line#:${LINENO} function:${FUNCNAME[0]:+${FUNCNAME[0]}(): }\nstatement: '
# a normal statement
echo something
# function call
stupid_func
# a pipeline of commands running in a subshell
( ls -l | grep 'x' )
PS1 사용
PS1은 bash가 명령 입력을 대기하는 것을 나타내는 일반적인 시스템 프롬프트입니다. 일부 에스 케이프 순서를 이해하고 함수 또는 프로그램을 실행할 수 있습니다. bash는 displayes 프롬프트 뒤에 커서를 위치시켜야하므로 프롬프트 문자열의 유효 길이를 계산하는 방법을 알아야합니다. PS1 변수 내에서 문자의 인쇄되지 않은 순서를 나타내려면 이스케이프 처리 된 중괄호가 사용됩니다. \ [ 문자가 아닌 \ 인쇄 순서 \] . 모든 말은 모든 PS * vars에 적용됩니다.
(검은 색 캐럿은 커서를 나타냄)
#everything not being an escape sequence will be literally printed
export PS1="literal sequence " # Prompt is now:
literal sequence ▉
# \u == user \h == host \w == actual working directory
# mind the single quotes avoiding interpretation by shell
export PS1='\u@\h:\w > ' # \u == user, \h == host, \w actual working dir
looser@host:/some/path > ▉
# executing some commands within PS1
# following line will set foreground color to red, if user==root,
# else it resets attributes to default
# $( (($EUID == 0)) && tput setaf 1)
# later we do reset attributes to default with
# $( tput sgr0 )
# assuming being root:
PS1="\[$( (($EUID == 0)) && tput setaf 1 \]\u\[$(tput sgr0)\]@\w:\w \$ "
looser@host:/some/path > ▉ # if not root else <red>root<default>@host....
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow