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
분기를 표시하는 화려한 스타일의 셸과 동일한 기능을 사용할 수 있습니다. 이것에 약간의 색상을 추가하면 좋습니다.
Reference
이 문제에 관하여(Bash에서 동적 프롬프트 문자열 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/awwsmm/create-a-dynamic-prompt-string-in-bash-3617텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)