프롬프트에 Python 스크립트의 출력을 추가하고 싶은데 zsh
방법을 모르겠습니다.
이것은 매뉴얼 페이지에서 "PROMPT EXPANSION"이라고 부르는 것을 통해 수행됩니까?
누군가 나를 올바른 길로 인도해 주세요. 즉, Google에서 찾을 수 없는 유용한 링크를 게시해 주세요.
답변1
두 가지 주요 방법이 있습니다:
- 매개변수 확장을 활성화하여
PROMPT_SUBST
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_function
Python 스크립트 호출 및 해당 출력을 변수에 캡처하는 방법 을 정의합니다 . 그런 다음 $PROMPT에서 이 변수를 사용할 수 있습니다.
my_precmd_hook_function() {
python_says=$(myPythonScript arg1 arg2)
}
PROMPT='$python_says'
후크에 원하는 만큼 많은 변수를 설정 precmd
하고 이를 사용하여 상당히 복잡한 프롬프트를 작성할 수 있습니다. 후크에서 더 많은 작업을 수행할수록 precmd
프롬프트를 표시하고 제어권을 반환하는 데 시간이 더 오래 걸린다는 점을 명심하세요. zsh
Python 스크립트가 매우 단순하다면 의심할 여지 없이 지연이 발생할 것입니다.
SIMPLE PROMPT ESCAPES
매뉴얼 페이지의 리소스 섹션에서 모든 가능성을 볼 수 있습니다 zshmisc
.