Se esse código é destinado a acessar dados internos do seu shell interativo, eles não devem ser executados como programas separados (scripts), mas devem ser interpretados por esse shell, assim como funções, funções autoloaded ou sourced scripts.
Se a razão pela qual você quer que eles sejam definidos como scripts é que você não quer que eles poluam o ambiente do seu shell, você pode executá-los em subshells. Use:
myfunction() (
...
)
Em vez de:
myfunction() {
...
}
Se for porque você não deseja que a definição deles seja adicionada ao seu ~/.zshrc
, adicione-os a outro arquivo e opte por esse arquivo em ~/.zshrc
( source /path/to/that/file
) ou use funções carregáveis automaticamente.
Se você ainda quiser que eles sejam executados como scripts / programas separados, será necessário passar a definição dessas funções e tudo o mais que o script possa precisar de uma forma ou de outra. Como:
CODE=$(
typeset -p preexec_functions
(($#preexec_functions)) && functions $preexec_functions
) your-script
E tenha your-script
do:
eval "$CODE"
Isso é despejar a definição dessa matriz e todas as funções que ela faz referência como código shell e ter esse código interpretado pelo script para que a mesma matriz e as mesmas funções sejam declaradas lá.