새로운 프롬프트가 표시 될 때마다 Bash prompt execute 명령


11

현재 git 브랜치를 보여주는 bash에 다음 프롬프트가 있습니다.

PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc

이것은 .bashrc를 소스 할 때 작동하지만 분기를 변경할 때는 작동하지 않으므로 PS1 var는 .bashrc를 소스 할 때만 평가되지만 새 프롬프트가 표시 될 때마다 평가해야합니다. bash 4.3으로 어떻게 이것을 달성 할 수 있습니까?

답변:


14

문제는 에 추가 되기 전에$(git_prompt) 일정한 문자열로 평가 된다는 것입니다 . 대신 코드를 추가해야합니다.$PS1

PS1+='$(git_prompt)'

2
이 오류를 범 bash: command substitution: line 1: syntax error near unexpected token 명령 교체 : ') 떠들썩한 파티 라인 1git_prompt)'
danielr1996

1
정말 이상합니다. "백업"( oldPS1="$PS1")을 만들고 다음을 시도하십시오.PS1='$(git_prompt) '
Hauke ​​Laging

9

프롬프트로 이것을 사용하여 지금 고쳤습니다.

PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"

여러 문자열을 하나의 PS1 문자열에 연결하기 전에 문제가있는 것 같습니다. 트릭은로 \명령을 실행하기 전에 를 작성하는 것 입니다 $(git_prompt).

그래서 $(git_prompt)때 평가됩니다 .bashrc평가 및

\$(git_prompt) 새 프롬프트가 표시 될 때마다 평가됩니다


5
미래에 이것을 찾는 사람이라면 : 줄을 묶는 큰 따옴표를 주목하십시오 ". \$(git_prompt)그것들없이 사용하면 작동하지 않습니다.
dthor

1

PS1에서 작은 따옴표를 사용해보십시오

PS1+='$(git_prompt)'

나는 또한 내 psOne 기능을 제안 합니다

psOne () 
{ 
    ps1tm=${1:-01};
    ps1tc=(30 31 32 33 34 35 36 37 38);
    PS1='${debian_chroot:+($debian_chroot)}\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\u\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]@\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\h\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] :\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \w\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \$ '
}

여기에 이미지 설명을 입력하십시오


ps1tm이 무엇인지 설명해 주시겠습니까?
danielr1996

@ danielr1996 그것은 텍스트 모드 (굵은 언 볼드 깜박임 밑줄 {0..5},이 함수에서 인수가 없으면 01로 설정됩니다
Jonah

0

광기를보고 싶습니까? 이것이 bash 프롬프트를 구성하는 방법입니다.

# inspiration: http://www.stumbleupon.com/su/2LpQMi 
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h:\w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch " (%s)")'
line1="${line1}${user_host_path}${git_branch} "
line2='\$ '
print_time='{ printf "%*s" $(($(tput cols) - 10)) " "|sed -e "s/./˙/g" -re "s/.{6}(..)$/ bash \1/"; date "+ %T"; } >&2'
color_bold='\[\e[0;1m\]'
color_reset='\[\e[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"
unset user_host_path xterm_title color_bold color_reset line1 line2 print_time git_branch

나는 큰 색 팬이 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.