Bash에서 동적 프롬프트 문자열 생성

zsh 에서 다음과 같이 프롬프트에 현재 Git 브랜치의 이름을 표시하는 멋진oh-my-zsh 프롬프트를 보았을 수 있습니다.



나는 bash에서 이와 같은 것을 재현하고 싶었고 실제로 동적bash 프롬프트를 생성하는 것이 정말 쉽다는 것을 발견했습니다. 지루하고 오래된 정적 프롬프트부터 시작하겠습니다.

$ export PS1="\n$ "

$ ls
Applications      Documents         Dropbox           Library
Desktop           Downloads         Git               Movies

$ 


이렇게 하면 내 프롬프트가 $ 기호로 설정되고 이전 명령의 출력이 다음 프롬프트에 바로 인접하지 않도록 앞에 개행이 있습니다. bash 프롬프트에 함수를 추가하려면 PS1 의 정의 내에 하위 셸로 포함하고 다음과 같이 하위 셸 구문의 시작 부분에서 $ 를 이스케이프 처리해야 합니다.

$ export PS1="\n\$(date)\n$ "

Thu 25 Jul 2019 14:27:23 IST
$ ls
Applications      Documents         Dropbox           Library
Desktop           Downloads         Git               Movies

Thu 25 Jul 2019 14:27:25 IST
$ 


이제 git 프로젝트에서 어떤 분기에 있는지 확인하려면 다음을 수행할 수 있습니다.

Thu 25 Jul 2019 14:32:12 IST
$ git status
On branch my-test-branch
Your branch is up to date with 'origin/my-test-branch'.

nothing to commit, working tree clean


이렇게 하면 첫 번째 줄에 현재 분기 이름이 표시됩니다. grep로 해당 줄을 선택하고 sed로 구문 분석할 수 있습니다.

Thu 25 Jul 2019 14:34:45 IST
$ git status | grep 'On branch' | sed 's/On branch / => /'
 => my-test-branch


그러나 우리가 git 리포지토리 내에 있지 않으면 어떻게 됩니까?

Thu 25 Jul 2019 14:35:06 IST
$ cd

Thu 25 Jul 2019 14:35:12 IST
$ git status | grep 'On branch' | sed 's/On branch / => /'
fatal: not a git repository (or any of the parent directories): .git


으악, 오류 텍스트. 모든 오류 출력을 /dev/null로 리디렉션해 보겠습니다.

Thu 25 Jul 2019 14:35:26 IST
$ git status 2>/dev/null | grep 'On branch' | sed 's/On branch / => /'


현재 디렉토리가 git 저장소가 아닌 경우 출력이 전혀 없으므로 grep 는 아무 것도 반환하지 않으며 sed 도 마찬가지입니다. 마지막으로 프롬프트에 다음을 추가해 보겠습니다.

Thu 25 Jul 2019 14:35:36 IST
$ export PS1="\n\$(date)\$(git status 2>/dev/null | grep 'On branch' | sed 's/On branch / => /')\n$ "

Thu 25 Jul 2019 14:35:41 IST
$ cd Git/my_git_project/

Thu 25 Jul 2019 14:35:49 IST => my-test-branch
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Thu 25 Jul 2019 14:35:53 IST => master
$ 


그게 다야! 이제 현재git 분기를 표시하는 화려한 스타일의 셸과 동일한 기능을 사용할 수 있습니다. 이것에 약간의 색상을 추가하면 좋습니다.

좋은 웹페이지 즐겨찾기