Tonin 은 기본 프롬프트 에서 버그 를 지적했습니다 . 최소 예 :
PS1 설정 :
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
이 시점에서 프롬프트는 다음과 같습니다.
$
이제 다음을 실행하여 종료 코드 출력을 트리거하십시오.
false
이제 프롬프트는 줄의 시작 부분에 빨간색으로 종료 코드를 포함합니다.
1 $
- Ctrl-를 누르십시오 r.
"false"를 입력하십시오. 이제 프롬프트에는 검색 만 포함됩니다.
(reverse-i-search)`false': false
- 를 누릅니다 Enter.
결과 터미널 히스토리에는 이제 다음이 포함됩니다.
1 $ch)`false': false
예상 출력 :
1 $ false
즉, 히스토리 검색 출력이 프롬프트와 혼합 되어 실행 된 실제 명령을 숨기는 것 같습니다 .
나는 이것을 사용PROMPT_COMMAND
하여이 문제를 해결하려고 시도했다 .
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
이것은 작동하지 않는 것 같습니다-라인은 검색 및 실행 후와 정확히 동일하게 보입니다.
이 문제를 어떻게 해결할 수 있습니까?
1
이것은 unix.stackexchange.com/a/71012
—
manatwork