bash에서 명령 프롬프트를 사용자 정의하는 방법

bash 쉘에서 명령 프롬프트는 입력 프롬프트가 표시 될 때 표시되는 텍스트입니다. 대부분의 시스템에서 다음과 같이 보입니다.

프롬프트에서 명령을 실행하기 전에 정보를 얻을 수 있습니다. 예를 들어, 위의 프롬프트는 다음을 보여줍니다.

  1. 누구인지 (사용자라는 사용자 )
  2. 당신이있는 곳 ( myhost 라는 컴퓨터)
  3. 당신의 작업 디렉토리는 ( ~, 당신의 홈 디렉토리의 약어입니다)

아마도 가장 중요한 것은 달러 기호 ( " $ ")입니다.이 기호는 루트가 아닌 사용자로 로그인했음을 나타내는 특수 문자입니다. 현재 루트로 로그인 한 경우이 문자는 대신 파운드 기호 ( " # ")가됩니다.

프롬프트를 나타내는 문자열은 PS1 이라는 특수 환경 변수에 저장됩니다. 위의 프롬프트에서 값은 다음과 같습니다.

 "\ [전자 메일 보호] \ h : \ W \ $" 

이 문자열에는 \ u, \ h, \ W, \ $의 네 가지 특수 문자가 있습니다. 이것은 이스케이프 된 문자 시퀀스이며 프롬프트가 표시 될 때마다 실제 값으로 대체됩니다.

특수 문자

아래 표에 나열된 특수 문자 시퀀스는 bash 쉘 프롬프트에서 사용할 수 있습니다.

문자 순서번역 대상
\에이"알람"문자. 삐 소리 또는 화면 플래시 트리거
\디Weekday Month Date 형식으로 표시된 현재 날짜 (예 : 5 월 13 일 수요일 ).
\ D { 형식 }현재 날짜와 시간은 strftime에 의해 해석 된 형식에 따라 표시됩니다. 형식을 생략하면 \ D {}에 현재 12 시간 AM / PM 시간 (예 : 07:23:01 PM )이 표시됩니다.
\이자형이스케이프 문자 (ASCII 27)
\ e [ 번호 m색상으로 표시 할 시퀀스의 시작을 나타냅니다. number는 숫자 또는 숫자 쌍으로, 사용할 색상과 스타일을 지정합니다. 색상 및 번호 쌍 목록은 아래를 참조하십시오.
\여자 이름시퀀스의 끝을 컬러로 표시합니다.
\ h시스템의 호스트 이름 (첫 번째 " . "까지) 예를 들어 시스템의 호스트 이름이 myhost.mydomain 인 경우 \ hmyhost
\ H시스템의 전체 호스트 이름.
\ j쉘이 관리하는 작업 수.
\엘쉘의 터미널 장치 식별자. 대개 한 자리 숫자입니다.
\엔개행 문자
\아르 자형캐리지 리턴
\에스쉘 이름 (현재 bash 세션을 시작한 프로세스의 기본 이름).
\티현재 시간은 24 시간 HH : MM : SS 형식으로 표시됩니다 (예 : 19:23:01 ).
\티현재 시간은 12 시간 HH : MM : SS 형식으로 표시됩니다 (예 : 07:23:01 ).
\ @현재 시간은 12 시간 HH : MM : SS AM / PM 형식 (예 : 07:23:01 PM )으로 표시됩니다.
\에이24 시간 HH : MM 형식의 현재 시간 (예 : 19:23 ).
\유현재 사용자의 사용자 이름입니다.
\VBash 버전 번호 (예 : 4.3 ).
\VBash 버전과 패치 번호 (예 : 4.3.30 ).
\ w현재 디렉토리. 사용자의 홈 디렉토리는 물결표 ( " ~ ")로 축약됩니다. 예 : / usr / bin, ~ 또는 ~ / documents
\ W현재 작업 디렉토리의 기본 이름 (예 : bin, ~ 또는 documents ).
\!현재 명령의 기록 번호입니다.
\ #현재 명령의 명령 번호 (명령 번호는 히스토리 번호와 같지만 새 bash 세션을 시작할 때 0으로 재설정됩니다).
\ nnn8 진수 값이 nnn 인 ASCII 문자입니다.
\\백 슬래시
\ [터미널 제어 코드와 같은 인쇄 할 수없는 문자 시퀀스의 시작을 표시합니다.
\]비 인쇄 순서의 끝을 표시합니다.
\ $UID가 0 (수퍼 유저)이면 #를 출력 하고 0보다 크면 다른 사람에게 $를 인쇄합니다.

현재 세션의 프롬프트 변경

명령. 양식 NAME = VALUE 와 함게 bash에서 다른 변수와 마 y 가지로 PS1 환 경 변수를 설정할 수 있습니다. 표준 프롬프트를 설정하려면 명령 행에 다음을 입력하십시오.

 PS1 = "\ [전자 메일 보호] \ h : \ W \ $" 

... 그리고 당신의 프롬프트는 즉시 바뀔 것입니다. 프롬프트 뒤에 추가 공백을 표시하기 위해 문자열에 달러 기호 다음에 나오는 마지막 공백을 알면 입력 한 명령을 프롬프트에서 쉽게 구별 할 수 있습니다. 여분의 공간은 필요하지 않지만 권장됩니다.

명령에서 PS1, = 및 문자열 사이에는 공백이 없습니다.

이후의 모든 세션에 대한 프롬프트 변경

새로운 세션마다 프롬프트를 변경하려면 bash 시작 파일을 편집해야합니다. 터미널 세션을 시작할 때마다 다음 파일이있는 경우 해당 파일을 읽고 스크립트로 실행합니다.

/ etc / profile ~ / .bash_profile ~ / .bash_login

~ / .profile

첫 번째 파일 인 / etc / profile 은 bash 세션을 시작하는 시스템의 모든 사용자를위한 시작 스크립트입니다. 모든 사용자에 대한 프롬프트를 변경하려면이 파일을 편집해야하며 이렇게하려면 수퍼 유저 권한이 필요합니다.

 sudo vi / etc / profile 

예를 들어 위의 명령은 암호를 묻는 프롬프트를 표시하고 sudoers 목록에있는 경우 vi 편집기를 사용하여 수퍼 유저로 범용 bash 시작 파일을 엽니 다.

다른 세 파일은 위의 순서대로 찾고 / etc / profile 다음에 실행 됩니다 . 이 세 파일은 홈 디렉토리에 있으므로 사용자를 위해서만 실행됩니다. 그들은 PS1을 여러 곳에서 정의 할 수 있습니다. 따라서 파일을 신중하게 읽어야 시스템에서 어떻게 구성되는지 확인할 수 있습니다. 예를 들어, 많은 시스템이 터미널이 색상을 지원하는지 여부에 따라 다른 PS1 값을 사용합니다.

세 파일 중 하나라도 존재할 수 있고 bash 세션에 사용될 수 있지만 둘 이상인 경우 나열된 순서대로 실행됩니다.

시작 파일의 줄을 삭제하거나 변경하지 않으려면 새 PS1 = 문을 파일 중 하나의 끝에 추가하여 사용자 지정 프롬프트를 적용 할 수도 있습니다.

프롬프트에 색상 추가하기

색상을 지원하는 터미널을 사용하고 있다면 프롬프트에 색상을 추가 할 수 있습니다. 색상은 다음 형식을 따르는 특수 문자 시퀀스를 사용하여 추가됩니다.

\ e [ 번호 m채색 된 부분을 시작합니다. 숫자 값은 색상을 지정하는 특수 숫자 또는 숫자 쌍입니다.
\여자 이름착색 부분의 끝을 나타냅니다. 기본 색상으로 재설정합니다.

예를 들어, 프롬프트 문자열 :

 PS1 = "\ e [1; 35m 이것은 밝은 보라색입니다. \ e [0; 35m ... 그리고 이것은 진한 자색입니다. \ e [m" 

다음과 같은 프롬프트를 생성합니다 :

다음은 사용할 수있는 색상 목록과 그 색상을 지정하는 숫자입니다.

번호)색상 / 스타일번호)색상 / 스타일
0; 30검은1; 30짙은 회색
0; 31빨간1; 31밝은 빨간색
0; 32녹색1; 32밝은 녹색
0; 33갈색1; 33노랑
0; 34푸른1; 34밝은 파랑
0; 351; 35밝은 보라색
0, 36시안1; 36밝은 청록색
0; 37회색1; 37화이트
4; 30검정색, 밑줄40배경 : 어두운 회색
4; 31빨간색, 밑줄41배경 : 빨간색
4; 32녹색, 밑줄42배경 : 녹색
4; 33갈색, 밑줄43배경 : 노란색
4; 34파란색, 밑줄44배경 : 파랑
4; 35자주색, 밑줄45배경 : 보라색
4, 36시안, 밑줄46배경 : 시안
4; 37회색, 밑줄47배경 : 회색

다음은 몇 가지 예와 그 모습입니다.

 PS1 = "\ e [0; 32mGreen \ e [0; 33mBrown \ e [0; 34mBlue \ e [0; 35mPurple \ e [0; 36mCyan \ e [0; 37mGray \ e [m" 

 PS1 = "밑줄 친 : \ e [4; 31mRed \ e [4; 32mGreen \ e [4; 33mBrown \ e [4; 35mPurple \ e [4; 36mCyan \ 엠" 

 PS1 = "\ e [44m \ e [1; 35m 파란색 배경에 보라색 \ e [m"