ksh88의 $PS1에 분기 이름 표시

ksh88의 $PS1에 분기 이름 표시

ksh88의 프롬프트에 현재 git 브랜치를 표시하고 싶습니다.

저는 강제 ksh88 쉘을 사용하여 IBM AIX에서 실행되는 백엔드를 사용하여 레거시 프로젝트를 진행하고 있습니다. 일부 작업에서는 대신 bash를 사용할 수 있지만 대부분의 일상 작업에는 ksh88을 사용해야 합니다. (쉘 변경 작업을 진행 중이지만 이는 매우 먼 일이고 거의 불가능합니다.)

그래서 저는 이 (간소화된) 변형을 사용하고 있습니다. 모두 작동하지만(현재 분기를 표시함) 그 중 어느 것도 동적이 아닙니다. 분기를 전환해도 여전히 동일한 분기가 표시됩니다.

export GIT_BRANCH=$(git branch 2>/dev/null | grep '^*' | colrm 1 2)
export PS1="\$GIT_BRANCH - $ "

또한

get_git_branch(){
    print -- git branch 2>/dev/null | grep '^*' | colrm 1 2
}
export PS1="$(get_git_branch) - $"

두 경우 모두 업데이트하려면 실행 중인 .profile을 다시 로드해야 . ~/.profile하지만 이는 실용적이지 않습니다.

$PWD (정식 버전에서 export PS1)를 추가하면 현재 디렉토리를 변경할 때 변경됩니다.

나는 여기에서 읽었다(각 프롬프트 전에 실행할 명령을 어떻게 설정합니까?) 특정 표현식을 확장하는 트릭이 있을 수 있지만 숫자 표현식에만 해당됩니다.

나 이거 본 적 있어 (지금으로서는 최선의 희망이야) 동적 라인을 사용하여 Solaris KSH 설정 PS1그러나 그것을 내 문제에 적용하는 방법을 잘 이해하지 못합니다.

제가 사용할 수 있는 다른 트릭이 있나요?

답변1

퍼즐 작업을 했습니다.

a) ksh93을 사용하십시오

b) 이러한 별칭은 프롬프트에 분기 정보를 포함하지 않도록 재설정하는 방법(원하는 경우)에 대한 아이디어를 제공합니다.

  • .profile에 다음을 추가했습니다.
ENV=~/.kshrc
export ENV
  • 나는 내 별칭을 .kshrc에 유지하기로 결정했습니다(위 참조). 핵심 라인은 다음과 같습니다
# alias to reset PS1
alias psr="PS1=$LOGNAME@`hostname`:'\[\${PWD##*/}\]'"
# alias to set PS1 to dynamically check for git branch active, or not
alias psgit="PS1=${LOGNAME}@$(hostname -s)'\[\${PWD##*/}\]{\$(git branch 2>/dev/null| grep \"^*\" | colrm 1 2)}'"

당신의 질문을 빌렸습니다!

내 기본 쉘은 일반 ksh(88)입니다. 로그인하고 다음과 같이 더 멋진 쉘로 전환하세요.

aixtools@x064:[aixtools]aixpb
aixtools@x064:[Playbook]psgit
aixtools@x064[Playbook]{$(git branch 2>/dev/null| grep ^* | colrm 1 2)}export PS1
aixtools@x064[Playbook]{$(git branch 2>/dev/null| grep ^* | colrm 1 2)}ksh93
aixtools@x064[Playbook]{master}
aixtools@x064[Playbook]{master}git checkout aixpb_main00
Updating files: 100% (44/44), done.
Switched to branch 'aixpb_main00'
Your branch is up to date with 'aixtools/aixpb_main00'.
aixtools@x064[Playbook]{aixpb_main00}cd
aixtools@x064[aixtools]{}

오타(":" 누락)가 있습니다. 하지만 많은 PS1은 매우 개인적이므로 수정할 수 있습니다.

도움이 되었기를 바랍니다!

관련 정보