zsh 프롬프트에 스크립트 출력을 포함하는 방법

zsh 프롬프트에 스크립트 출력을 포함하는 방법

프롬프트에 Python 스크립트의 출력을 추가하고 싶은데 zsh방법을 모르겠습니다.

이것은 매뉴얼 페이지에서 "PROMPT EXPANSION"이라고 부르는 것을 통해 수행됩니까?

누군가 나를 올바른 길로 인도해 주세요. 즉, Google에서 찾을 수 없는 유용한 링크를 게시해 주세요.

답변1

두 가지 주요 방법이 있습니다:

  1. 매개변수 확장을 활성화하여PROMPT_SUBST
  2. psvar정렬

1. 프롬프트의 매개변수 확장

PROMPT_SUBST활성화된 경우

setopt PROMPT_SUBST

프롬프트는 평가되기 전에 매개변수 확장, 명령 대체 및 산술 확장을 거칩니다.

이런 방식으로 포함된 스크립트의 출력을 명령으로 바꿀 수 있습니다. 예를 들어:

PROMPT='Look at this: $(python yourscript.py) >'

출력에 이스케이프 시퀀스( %~, %M%F{red})가 포함된 경우 프롬프트가 인쇄되기 전에 평가됩니다.

2. psvar 배열

배열의 처음 9개 값 중 하나를 psvar스크립트의 출력으로 설정할 수 있습니다. 그런 다음 1에서 9 %Xv사이 X의 숫자를 사용하여 호출할 수 있습니다 ( X생략할 경우 기본값은 1입니다).

psvar[5]=$(python yourscript.py)
PROMPT='Look at this: %5v >'

각 인쇄 프롬프트 전에 값을 새로 고치려면 precmd후크 기능을 설정해야 합니다.

precmd() {
    psvar[5]=$(python yourscript.py)
}

이미 기능이 있거나 precmd, 여러 기능을 사용하고 싶다면 를 활용하는 것이 좋습니다 add-zsh-hook.

# load add-zsh-hook, need to be done only once
autoload -Uz add-zsh-hook

pyscript() {
    psvar[5]=$(python yourscript.py)
}

add-zsh-hook precmd pyscript

pycript그러면 프롬프트를 인쇄하기 전에 실행해야 하는 기능 목록에 추가됩니다 .

답변2

precmd명령의 출력을 가져와 필요에 따라 형식을 지정한 다음 프롬프트에 제공하는 후크를 설정하여 이를 수행 할 수 있습니다 . 최소한 다음이 필요합니다.

autoload -U add-zsh-hook
add-zsh-hook precmd my_precmd_hook_function

my_precmd_hook_functionPython 스크립트 호출 및 해당 출력을 변수에 캡처하는 방법 을 정의합니다 . 그런 다음 $PROMPT에서 이 변수를 사용할 수 있습니다.

my_precmd_hook_function() {
  python_says=$(myPythonScript arg1 arg2)
}

PROMPT='$python_says'

후크에 원하는 만큼 많은 변수를 설정 precmd하고 이를 사용하여 상당히 복잡한 프롬프트를 작성할 수 있습니다. 후크에서 더 많은 작업을 수행할수록 precmd프롬프트를 표시하고 제어권을 반환하는 데 시간이 더 오래 걸린다는 점을 명심하세요. zshPython 스크립트가 매우 단순하다면 의심할 여지 없이 지연이 발생할 것입니다.

SIMPLE PROMPT ESCAPES매뉴얼 페이지의 리소스 섹션에서 모든 가능성을 볼 수 있습니다 zshmisc.

관련 정보