Bash 사용자 정의는 터미널과의 첫 번째 상호 작용 후에만 발생합니다.

Bash 사용자 정의는 터미널과의 첫 번째 상호 작용 후에만 발생합니다.

제목이 아쉽네요. 나에게 일어난 일을 이보다 더 잘 전달할 수 있는 방법이 없습니다. 상황은 다음과 같습니다. bash, wezterm(터미널 에뮬레이터) 및starship(사용자 정의 가능한 프롬프트). 하지만 어떤 이유에서인지 새 터미널을 열 때마다 항상 재고/기본 프롬프트가 표시되고 업데이트를 받으려면 Enter 키를 누르거나 무언가를 입력해야 합니다. 여기서 무슨 행동이 일어나고 있는지 모르겠습니다.

문제를 보여주는 터미널 이미지

보시다시피, 첫 번째 행은 스타일이 적용되지 않은 행이고, 두 번째 행은 스타일이 어떻게 표시되어야 하는지를 나타냅니다.

내 관찰은 다음과 같습니다

  1. 새 터미널을 열 때 항상 이런 일이 발생합니다.
  2. 이 컴퓨터에 SSH로 접속하면 이런 일이 발생하지 않는 것 같습니다.
  3. Mux를 통해 터미널 내에서 새 터미널을 열면 이런 일이 발생하지 않습니다.zellij

이상한 점은 아무 것도 입력한 후에는 제대로 작동한다는 것입니다. 그래서 디버깅하는 방법을 모르겠습니다. 뭔가 이상한 일이 벌어지고 있을 수도 있는데 어떻게 작동하는지 모르겠습니다.

내 bash 설정은 다음과 같습니다.여기에서 발견, 그러나 여기서는 가장 중요한 문서에 대해 간략하게 설명하겠습니다.

내꺼야 bash_profile, 그냥 소스 내꺼야.bash_rc

source ~/.bashrc

내 거.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything

if [ -e ~/.bash_aliases ]; then
    source ~/.bash_aliases >/dev/null 2>&1
fi

case $- in
*i*) ;;
*) return ;;
esac

.. truncated, other stuff is the default that comes in bashrc basically

드디어 내꺼야.bash_aliases

unalias -a
set -o vi
...

# Have to install bash-preexec as well
[[ -e ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh

# here are the evals and they are 100% evaluated
source ~/.config/wezterm/wezterm.sh
eval "$(starship init bash)"

[[ -e ~/.config/personal/bash/alias_personal ]] && \. ~/.config/personal/bash/alias_personal

도서관 자체의 문제일 수도 있지만 그럴 가능성이 매우 높습니다. 이 동작은 구성을 조작한 후에 발생하기 시작했으며 현재 몇 달이 지났습니다.

답변1

Starship은 실행될 때마다 해당 구성을 적용합니다.어느명령(참조starship init bash --완전한 코드 인쇄예를 들어 설정 $PROMPT_COMMAND), 그러나 내가 아는 한 .bashrc또는 에는 없습니다 .bash_profile. 이는 엄청나게 비효율적일 뿐만 아니라 명령을 실행하기 전에 프롬프트를 설정할 수 없다는 의미이기도 합니다. 여기서는 빈 명령(예: Enter 키를 누르는 것)이 허용되지만 요점은 뭔가를 해야 한다는 것입니다.

즉,이 방법.

개인적으로 내가 원하는 것이 멋진 프롬프트뿐이라면 그냥 설정 ~/.bashrc하고 ~/.bash_profile로그인 시 호출할 것입니다.

관련 정보