맥 기본 터미널 기본 설정의 PS1은 현재 위치를 보여주지 않는다. 개인적으로 우분투에서의, scp remote 경로와 비슷한, 형태를 좋아하기 때문에 우분투에서의 것처럼 바꿔두었는데 (export PS1="\h:\W \u\\$"
) Linux와 Mac 에서의 기본 PS1
설정은 다음과 같고
- Linux
\s-\v\$
- Ubuntu
\h:\W \u\\$
- Mac
[\u@\h \W]\$
PS1
에서 사용할 수 있는 포매터는 아래와 같은 것들이 있다.
Expression | Output |
---|---|
\t |
24시 단위 시간 |
\T |
12시 단위 시간 |
\@ |
12시 단위 시간 및 오전/오후 표기 |
\d |
현재 날짜 |
\s |
현재 사용중인 쉘 |
\w |
현재 디렉토리 절대 경로 |
\W |
현재 디렉토리 |
\u |
사용자명 |
\h |
호스트명 |
\H |
도메인명 |
\# |
사용한 명령어 히스토리 |
\! |
사용한 명령어 히스토리의 번호 |
\$ |
현재 사용자가 root 인 경우 # 문자 일반 사용자인 경우 $ 문자 |
\n |
개행 |
\r |
캐리지 리턴 |
\v |
쉘 버전 |
\V |
쉘 버전 상세 |
지금까지 PS1
은 그냥 쉘 환경에서 현재 상태를 보여주는 환경변수이고 정해진 포매터로 커스텀할 수 있구나하고 생각했었는데 갑지가 PS
는 무슨 뜻이지? 1
이 있으면 2
도 있는건가 하는 생각이 들었다.
찾아보니 PS
는 PROMPT STATEMENT
의 준말이었고 PS1
외에도 PS2
,PS3
,PS4
에다가 PROMPT_COMMAND
까지 해서 프롬프트를 사용자정의할 수 있게 하는 환경변수들이 있었다. 아래 링크에서 보다 자세한 설명과 간단한 샘플들은 확인할 수 있다.
https://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/
요약하면 아래와 같은 용도로 사용하는 것 같다.
- PS1
- 쉘 현재 상태 정보
- PS2
- for, select 문을 사용하거나 이스케이프로 개행하는 등 멀티라인 커맨드인 경우를 식별
- PS3
- bash
select
문에서 프롬프트 될 문장
- bash
- PS4
- 디버깅 목적으로
set -x
가 활성화돼 있을 때 추가 정보 제공
- 디버깅 목적으로
- PROMPT_COMMAND
PS1
에 앞서 실행될 명령
쉘 프로그래밍을 하거나 운영 환경에 제약을 걸고자 할 때 유용하게 쓸 수 있을 것 같다.