기본값(존재하는 경우)을 재정의하지 않고 $PROMPT_COMMAND를 사용자 정의하려면 어떻게 해야 합니까?

기본값(존재하는 경우)을 재정의하지 않고 $PROMPT_COMMAND를 사용자 정의하려면 어떻게 해야 합니까?

Mac 터미널은 PROMPT_COMMAND기본적으로 기록을 확인하고 현재 작업 디렉터리(탭 제목)를 업데이트합니다.

echo $PROMPT_COMMAND상단에 추가하면 .bash_profile다음이 표시됩니다.

shell_session_history_check; update_terminal_cwd

PROMPT_COMMAND기본값을 재정의하지 않고 직접 추가하고 싶습니다 . 기본값은 사용자 정의 값 앞에 PROMPT_COMMAND세미콜론과 공백으로 구분되어 표시되어야 합니다.

IntelliJ 및 VS Code와 같은 일부 프로그램에는 기본값이 없습니다. 따라서 이 경우에는 공백/세미콜론을 포함하고 싶지 않습니다.

답변1

Bash 5.1부터 PROMPT_COMMAND배열이 될 수 있습니다. 실행될 첫 번째 명령으로 자신의 명령을 추가할 수 있습니다.

PROMPT_COMMAND=(mycommand "${PROMPT_COMMAND[@]}")

이는 기존 값이 PROMPT_COMMAND단일 문자열에 여러 명령을 포함하는 경우에도 작동합니다.


일반적으로 사용되는 macOS bash와 같은 이전 Bash의 경우 다음을 사용할 수 있습니다.매개변수 확장이를 위해 :+:

${parameter:+word}
만약에parameter비어 있거나 설정되지 않은 경우, 아무것도 대체되지 않으며, 그렇지 않으면 확장됩니다.word교체됩니다.

한 가지 예:

$ unset var
$ var=${var:+"$var; "}XXX
$ echo "$var"
XXX
$ var=abc
$ var=${var:+"$var; "}XXX
$ echo "$var"
abc; XXX

따라서 기존 명령을 첨부된 상태로 유지하기 위해 ;사용합니다.

PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'mycommand'

PROMPT_COMMAND이전에 비어 있었다면 뒤에 mycommand포함되고, 그렇지 않은 경우 ;기존 명령과 사이에 삽입됩니다 mycommand.

답변2

# If PC contains anything, add semicolon and space
if [ ! -z "$PROMPT_COMMAND" ]; then
    PROMPT_COMMAND="$PROMPT_COMMAND; "
fi

# Add custom PC
PROMPT_COMMAND=$PROMPT_COMMAND'CUSTOM_PC_HERE'

관련 정보