Enviar matriz para subshell função com pipe?

1

Eu realmente preciso colocar um array em um subshell para que os processos possam ser executados juntos em um script. Eu sei que não posso exportar um array, mas é possível enviá-lo através de um pipe para um subshell, e como eu faria isso? Digamos que eu tenha uma função running() ; qual seria o conteúdo para que eu pudesse atualizar o array quando ele muda no programa principal. Eu não gostaria de armazenar o array em arquivos, pois isso seria muito lento.

    
por Mike 25.05.2016 / 18:41

1 resposta

1

Basta fazer uma função usando myfunction() ( ... ) em vez de myfunction() { ... } (assim será executado em um subshell) e passar sua matriz como argumentos de função.

myfunc() (
  for f in "$@"; do
    printf '%s\n' "$f"
  done
)

myfunc these arguments "are passed" 'to myfunc'

myarray=( "These values" "are set as" part 'of an array' )

myfunc "${myarray[@]}"

A saída parece:

these
arguments
are passed
to myfunc
These values
are set as
part
of an array

Nota: Essa é apenas uma função de exemplo, mas na verdade, aqui está uma versão mais simples que faz a mesma coisa:

myfunc_simpler() (
  printf '%s\n' "$@"
)
    
por 25.05.2016 / 19:04

Tags