O virtualenv é ativado por sourcing (não executando normalmente) o script virtualenv/bin/activate
. Se você quiser fazer isso em seu próprio script, você deve fornecer esse script também e não apenas executá-lo. Significado:
source startvenv.sh
A diferença entre execução e terceirização é que a execução executa o script em sua própria subpasta separada, que é isolada da shell pai (aquela da qual você a chamou), por exemplo, variáveis de ambiente e outras alterações dentro do script não são propagadas para o pai.
O fornecimento explicitamente faz exatamente isso, executando o script no seu shell atual , que deixa intactas todas as alterações nas variáveis de ambiente, etc.
Aqui está um extrato resumido de man bash
(seção sobre o Shell Builtins):
. filename [arguments]
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command exe‐
cuted from filename. [ ... ]