IT/리눅스

[Linux] bashrc의 PS1를 이용한 쉘프롬프트 환경 변경

몬스터r 2022. 12. 17. 11:54

[Linux] bashrc를 이용한 쉘 프롬프트 환경 변경


리눅스의 CLI 환경을 바라보다 보면 pwd를 입력하지 않아도 '내 현재 디렉토리를 출력하거나 현재 날짜와 시간을 볼 수 있으면 좋겠다.' 하는 생각이 들 때가 있다. 그럴 때를 위해 있는 것이 바로 bashrc라는 파일이다.

이 파일을 이용해 PS1이라는 변수를 수정하여 프롬프트의 출력을 바꿀 수 있는데 계정별로 확인하려면 파일이 숨겨져 있기 때문에 ls -a 명령어를 사용하여 확인해야 한다.



사용자 별 .bashrc 파일 내용

cat .bashrc
# .bashrc

...
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

이 파일은 사용자 별로 개별적으로 설정하는 파일이라 해당 계정만 파일 내 설정 값이 적용된다.


하지만 파일 내용을 보면 기본적으로는 /etc/bashrc를 source 하여 적용한다.
그렇기 때문에 전체 계정을 적용하려면 /etc/bashrc의 PS1을 수정하면 된다.


/etc/bashrc 파일 내용

cat -n /etc/bashrc
    ...
    41    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \w]\\$ "

41번 줄을 확인해 보면 현재 전체 계정에서 적용될 PS1의 설정이 되어 있다. 이 줄을 수정하면 명령 프롬프트의 모양이 바뀐다.

기본 형태의 이미지를 보면 다음과 같다.:



위 사진과 같이 아주 밋밋하고, diroec라는 디렉토리의 하위 디렉토리가 어디인지 확인하기가 힘들다. 그렇기 때문에 나는 다음과 같이 설정했다.:

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="\e[1;32m[\D{%Y-%m-%d} \t \w]\e[0m\n[\u@\h \W]\\$ "

기본 형태의 위에 한 줄을 추가하여 현재 날짜와 시간, 내가 위치한 디렉토리 정보가 출력되도록 설정했다. 직관성이 매우 높아진 것을 확인할 수 있다.


이러한 설정을 위해 PS1에 등록할 수 있는 옵션은 다음과 같다.:

\t 현재 시각을 24시간 기준 HH:MM:SS로 표시
\T 현재 시각을 12시간 기준 HH:MM:SS로 표시
\@ 현재 시각을 12시간 기준 오전/오후로 표시 (06:24 PM)
\d 현재 날짜를 요일, 월, 일 형식으로 표시 (Fri Dec 16)
\u 사용자명 표시
\! 사용한 명령어의 history 번호 표시
\\$ 사용자의 uid가 0이면 '#'을 표시하고 그 외에 '$' 표시
\s 현재 사용중인 쉘의 이름 표시 (/bin/bash)
\w 현재 디렉토리의 전체 경로 표시
\W 현재 디렉토리 표시
\# 입력 시마다 번호를 부여
\e 색 입력을 위해 사용 (PS 변수 설정 맨 앞에 '\e1;32m'를 추가하면 프롬프트의 색이 초록색으로 변경)
\n 줄바꿈

이것보다 더 많은 옵션이 있지만 보통 많이 쓰는 옵션만 적었다.


마지막으로 특정 계정의 프롬프트만 변경하기 위해서는 다음과 같이 수정해주면 된다.:

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
export PS1="\e[1;32m[\D{%Y-%m-%d} \t \w]\e[0m\n[\u@\h \W]\\$ "

위 설정으로 환경변수 PS1을 수정해 줌으로써 특정 계정의 프롬프트만 변경이 가능하게 된다.


logout 후 다시 로그인해보면 프롬프트 환경이 변경된 것을 확인할 수 있다.



프롬프트 디자인 변경만으로 pwd를 입력하지 않아도 바로 디렉토리 경로를 표시할 수 있고, 현재 날짜 및 시간을 확인할 수 있으면 직관성이 굉장히 좋아지고 그에 따라 일의 능률도 아주 조금이지만 더 좋아질 수 있다.

사내 환경이 아닌 개인 환경이라면 본인 시스템의 프롬프트 환경을 바꿔 보는 것을 추천한다.