Executando funções que foram declaradas fora do meu shell script

1

Atualmente, meu ZSH tem algumas funções de origem, por exemplo:

% declare -f
     ... a lot of shell functions appears here.

Atualmente, estou escrevendo um script de shell que chamará uma função específica dessa lista ( prompt_dir do tema do Powerlevel9k para o Oh-My-Zsh).

Meu script é:

#!/bin/zsh
echo_prompt_segment(){
    # bunch of source-code here
}

zsh_oddeven_dir(){
   prompt_dir echo
}

zsh_oddeven_dir

O problema é que meu script não pode acessar essas funções:

% ./oddeven-pwd.sh
zsh_oddeven_dir:1: command not found: prompt_dir

Quando eu faço declare -f de dentro do script, há apenas duas funções dentro do meu script:

% ./oddeven-pwd.sh 
echo_prompt_segment () {

}
zsh_oddeven_dir () {
    declare -f
}

Posso acessar e executar essas funções que foram declaradas acima do meu script? Se sim, como?

    
por Diego S. 04.06.2018 / 15:23

1 resposta

1

Como os scripts padrão são executados em subshells, o recurso que você precisa é de funções exportadas, disponível em bash , mas não em zsh .

Em bash , o local padrão para adicionar funções do usuário está em ~/.bashrc , mas isso não é executado, a menos que bash seja interativo (especificamente, não em um subshell executando um script), que as funções exportadas vencem.

O que parece funcionar, conforme esta resposta , é colocar as declarações de função em ~/.zshenv , que é executado por padrão em cada lançamento, interativo ou não.

Você também deve verificar a resposta anterior (aceita), que, entre outras coisas, explica o motivo pelo qual zsh não suporta funções exportadas.

    
por 04.06.2018 / 16:29