Como acessar $ preexec_functions a partir de um script

0

Estou convertendo algumas funções Zsh para executar como scripts e, em uma delas, preciso acessar valores em (por exemplo) $preexec_functions . Tudo funciona perfeitamente nas funções, mas isso falha no script.

É possível acessar esse valor de um script?

    
por iconoclast 07.01.2018 / 04:58

1 resposta

2

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á.

    
por 07.01.2018 / 08:17

Tags