"어떤 프롬프트"가 제공하는 기능은 어디에 정의되어 있나요?

"어떤 프롬프트"가 제공하는 기능은 어디에 정의되어 있나요?

나는 "stuff"를 사용할 때 호출될 파일을 찾기 위해 "which stuff"를 사용하는 데 익숙합니다. "어떤 프롬프트"에 대한 응답을 보고 놀랐습니다.

prompt () {
        local prompt_opts
        set_prompt "$@"
        (( $#prompt_opts )) && setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}"
        true
}

내 Archlinux 시스템에서. 이것은 어디에서 왔으며 현재 구축 중인 chroot 환경에서 프롬프트 명령을 사용할 수 있게 하려면 어떻게 해야 합니까? (방금 다른 명령을 복사했습니다...여기에서는 작동하지 않습니다 =))

편집하다:저는 zsh를 쉘로 사용하고 있습니다. 어쩌면 이로 인해 뭔가가 바뀔 수도 있습니다.

답변1

실행할 때 얻는 명령은 which이라는 함수입니다 prompt. 출력이 정의입니다.

다음 명령을 사용하여 볼 수도 있습니다.

$ declare -f prompt

프롬프트() 함수는 어디에 있나요?

이것은 약간 까다롭습니다. grep" " 문자열을 찾는 것과 같은 도구를 사용해야 합니다 prompt (). 일반적으로 살펴봐야 할 장소는 다음과 같습니다.

세게 때리다

(메모:whichBash에서 사용 type하는 대신)

$ grep -R "prompt ()" .bashrc .bash_profile /etc/bashrc /etc/profile*

다루기 힘든

$ grep -R "prompt ()" <files>

zsh매뉴얼 페이지에서 사용되는 파일은 다음과 같습니다.

   $ZDOTDIR/.zshenv
   $ZDOTDIR/.zprofile
   $ZDOTDIR/.zshrc
   $ZDOTDIR/.zlogin
   $ZDOTDIR/.zlogout
   ${TMPPREFIX}*   (default is /tmp/zsh*)
   /etc/zshenv
   /etc/zprofile
   /etc/zshrc
   /etc/zlogin
   /etc/zlogout    (installation-specific - /etc is the default)

다음 위치 중 하나에 위치해야 합니다. 이 위치 중 어느 곳에도 표시되지 않으면 검색 범위를 넓혀야 합니다. 문자열 " prompt"만 찾는 것이 좋습니다.

답변2

promptset_prompt그 자체로는 유용하지 않습니다. 또한 필요한 (및 모든 종속성) 이라는 또 다른 함수를 호출합니다 .

가장 먼저 찾아야 할 것은 자동 로드된 기능입니다.

print -rl $fpath/prompt(N)

이 외에도 초기화 파일 및 함수 로드 경로의 파일에서 함수 정의를 검색합니다.

grep -E '^ *function +prompt($|[^0-9A-Z_a-z])|^ *prompt *\(' ~/.z* /etc/zsh/*(.N) /etc/z*(.N) $fpath/*(.)

prompt함수 의 정의는 …/Prompts/promptinit다음과 같습니다.프롬프트 주제요소. 또한 선택한 프롬프트 테마에 대한 파일 promptinit도 필요합니다 . 선택한 프롬프트 주제(함수 호출)를 prompt_*_setup봅니다 .~/.zshrcprompt

관련 정보