Onde a função dada por “which prompt” é definida?

3

Estou acostumado a usar "which stuff" para encontrar o arquivo que será chamado quando eu uso "stuff". Fiquei bastante surpreso ao ver "que prompt" responder com

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

no meu sistema Archlinux. De onde isso vem, e como faço o comando prompt disponível dentro do ambiente chroot que estou construindo atualmente? (Acabei de copiar os outros comandos para ele ... isso não funciona aqui =))

Edit: Estou usando o zsh como meu shell, talvez isso mude alguma coisa.

    
por Jens 07.11.2013 / 22:52

2 respostas

3

O comando que você está recebendo quando você executou which é uma função chamada prompt . A saída é sua definição.

Você também pode ver usando este comando:

$ declare -f prompt

Onde está a função prompt ()?

Isso é um pouco mais complicado. Você terá que recorrer ao uso de uma ferramenta como grep para encontrar a string " prompt () ". Os locais habituais para procurar são os seguintes:

bash

(NB Não use which no bash , use type )

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

zsh

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

Na página man, estes são os arquivos que o zsh faz uso:

   $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)

Deve estar em um desses locais. Se ele não aparecer em nenhum desses lugares, será necessário expandir sua pesquisa. Eu sugeriria procurar apenas a string " prompt ".

    
por 07.11.2013 / 23:05
1

prompt por si só não é útil: ele está chamando outra função chamada set_prompt , você também precisa desta (e todas as suas dependências).

A primeira coisa a procurar seria uma função autoloaded.

print -rl $fpath/prompt(N)

Bloqueando isso, procure em seus arquivos de inicialização e em arquivos no caminho de carregamento da função para a definição da função.

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

A função prompt é definida por …/Prompts/promptinit : faz parte do prompt temas . Além de promptinit , você precisará do arquivo prompt_*_setup para o tema de prompt escolhido. Procure na sua ~/.zshrc a sua escolha do tema de prompt - uma chamada para a função prompt .

    
por 07.11.2013 / 23:59