Captura de saída de uma função, mas deixe-a sair

3

Suponha que tenhamos fct definido da seguinte forma:

fct() {
  echo words
  read -n1 x
  [ $x == q ] && exit
}

Chamar fct funciona como esperado, mas se você precisar interceptar sua saída, var='fct' , exit não funcionará. De acordo com o que encontrei pesquisando na net, exit funciona, mas sai de uma shell gerada. Ele funciona com kill -s KILL $$ , então fct é executado no mesmo processo que = , apenas não é o mesmo contexto e exit encerra apenas o contexto, não o shell.

Existe uma maneira de chamar fct para interceptar sua saída e deixar exit fechar o mesmo contexto que o igual? Ou existe alguma outra maneira de matar para parar o processo?

    
por kbenoit 18.11.2016 / 02:02

1 resposta

1

Eu descobri!

Podemos passar o fluxo através de um arquivo temporário! No linux, podemos passá-lo através de um arquivo em /dev/shm , para que os dados permaneçam na memória. Nós também podemos envolvê-lo em uma função:

get_output() {
  $1 > /dev/shm/bash_pipe
  eval $2='cat /dev/shm/bash_pipe'
  rm /dev/shm/bash_pipe
}

Podemos então usá-lo assim: get_output fct var e você pode usar a saída de fct com $var .

    
por 18.11.2016 / 02:02

Tags