Eu quero um script que configure minhas ferramentas, mas também mantenha o ambiente virtual intacto para o meu prompt. Mas, como heemayl aponta abaixo, um script de shell, quando executado, é executado em um subshell e todos os parâmetros e ambiente saem do escopo assim que a execução é concluída. Agora estou pensando, a melhor maneira seria abrir uma nova janela de terminal a partir do script e fazer com que o script "enviasse" um comando source activate
para o novo terminal. Mais detalhes seguem, mas existe uma maneira de configurar minhas ferramentas e me deixar em um prompt de env virtual?
Quando comecei a trabalhar em muitos dos meus projetos, ou seja, aqueles que usam o Django, eu começaria da mesma maneira. Isso se transformou em um script, abaixo.
#!/bin/bash
#0 cd into project
cd $WSGI
#1. Load the virtual env
. /path/to/virtualenvs/django1-8-py-3/bin/activate
#2. Open spyder or other IDEs
spyder3 &
#3. Run an interactive shell that runs the development server i.e.
ipython -m pdb manage.py runserver
Isso funciona bem, até que eu precise sair do ipython e entrar na festa ativada. Como o script acima foi concluído depois que o ipython é encerrado, sou colocado no shell simples. Mas o que eu quero é ver o prompt, ou seja
(virtualenv) me @ mine: ~ $
como se eu tivesse executado o comando source activate
e não o script acima.
Isso cheira a um problema XY, eu sei.
Mas sem contexto, receei que minha pergunta não fosse clara. Estou perguntando como fazer um script que, no final, me fornece um terminal com o meu virtualenv.
Sim, eu poderia simplesmente fazer isso:
source acitvate
run my script
when done in ipython I'm still in virtual env
Solução possível
Posso usar um script de shell para abrir uma nova janela de terminal?
Eu estou pensando, talvez haja uma maneira de:
do the steps in my script first
then open a new terminal window
run activate in this window
... resultando em duas guias / janelas, uma que executa o ipython e a outra está no virtualenv bash (para que eu possa, por exemplo, executar comandos manage.py sem parar o ipython).