Uma abordagem (deselegante) poderia ser redirecionar a saída de um processo assíncrono (que faz o trabalho lento) para um arquivo e usar o conteúdo desse arquivo somente quando você precisar dele. Você pode fazer as coisas nesse meio tempo. Por exemplo:
# placing everything into a function only because it easier to test
function func {
# Test (I think that "runserver" is one of the alias you should get)
echo -n "start: "
alias -p|grep -q runserver && \
echo \"runserver\" is defined || \
echo \"runserver\" is NOT defined
# prepare the aliases in background
f=$(mktemp)
( python ./manage.py | \
sed -n 's/^ \(.*\)/alias =".\/manage.py "/p'
sleep 2 # simulate slow process
) >$f &
slow_process_id=$!
# here you can do things...
echo "I'm doing thing..."
sleep 1
echo "...finished my things. Waiting for the aliases"
# but if you need the aliases you must check that they are ready
wait $slow_process_id
source $f
rm -f $f
echo "Aliases ready :-)"
# Test again
echo -n "end: "
alias -p|grep -q runserver && \
echo \"runserver\" is defined || \
echo \"runserver\" is NOT defined
}
Por favor, veja também coproc ... command ...
, mas eu acho que suas alças de arquivo desaparecem quando o comando termina.
Eu também tentei duas abordagens erradas : primeiro eu tentei ter meu
script source
algumas definições de alias de um subprocesso, mas, de
Claro que esses aliases não fizeram para o shell de chamada. O problema
aqui é que &
gera um subshell.
Depois tentei usar indireção. O problema aqui é que "indireta" variáveis não são especiais e são separadas da chamada concha.
Obrigado ao G-Man pelos comentários úteis.