Execute um comando em segundo plano que defina env var ou defina a função

2
> export foo=1 &
[1] 9016
[1] + done      export foo=1
> echo $foo

>

Eu sei que ao executar um comando com & você gera um novo processo e o export foo=1 não está definindo env vars no shell pai. No entanto, isso é factível?

Espeficicamente, estou desenvolvendo no Node e muitos pacotes como executar comandos js e configurar a conclusão na hora, por exemplo, grunhido e gulp. Isso é muito lento.

Estou pensando em criar um utilitário semelhante ao autoenv . Quando você entra em um diretório, ele executa os comandos js e conclui a configuração em segundo plano, e executa novamente quando Gruntfile.js ou gulpfile.js muda, etc.

Então, como posso executar um comando de forma astérica e, quando termina, define env vars & funções para mim?

    
por octref 19.04.2015 / 08:08

1 resposta

3

Por interpretação estrita, o que você quer fazer é impossível. Então a questão é quanto você tem que trapacear para fazer algo assim? Você precisa bash, um PROMPT_COMMAND e dois arquivos temporários. você também terá que aceitar que o shell não será atualizado até o comando após a conclusão da tarefa em segundo plano. Também recomendaria usar o make no processo de segundo plano, para que a tarefa demorada seja executada apenas conforme necessário.

Primeiro configure seu gancho de evento:

PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }'

depois, desligue o processo em segundo plano

(echo export foo=1 > file1 && mv file1 file2 )&

Por que o mv ? A presença de arquivo2 indica que a tarefa está completa e que o arquivo pode ser analisado, para que você possa levar seu arquivo de criação de tempo doce1.

    
por 19.04.2015 / 08:29