2011-08-03 5 views
7

J'essaie d'écrire ce qui devrait être un script bash super simple. Fondamentalement activer un env virtuel et que de changer pour le répertoire de travail. Une tâche que je fais beaucoup et condesing à une commande juste fait sens.VirtualEnv initilaized à partir d'un script bash

Fondamentalement ...

#!/bin/bash 
source /usr/local/turbogears/pps_beta/bin/activate 
cd /usr/local/turbogears/pps_beta/src 

Cependant, quand il exécute dépotoirs tout juste à la coquille et je suis toujours dans le répertoire que je courais le script et l'environnement n'est pas activé.

Répondre

20

Tout ce que vous devez faire est d'exécuter votre script avec la commande source. C'est parce que la commande cd est locale au shell qui l'exécute. Lorsque vous exécutez un script directement, un nouveau shell est exécuté et se termine lorsqu'il atteint la fin du fichier. En utilisant la commande source, vous dites au shell d'exécuter directement les instructions du script.

+0

qui, par ailleurs, est la raison pour laquelle vous utilisez « source » dans votre propre script. –

+0

Exactement ce dont j'avais besoin. Le marquera comme correct dès que la minuterie meurt. – Ominus

1

La valeur de cd est locale au script en cours, qui se termine lorsque vous tombez à la fin du fichier. Ce que vous essayez de faire n'est pas "super simple" parce que vous voulez surcharger ce comportement.

Regardez exec pour remplacer le processus en cours avec le processus de votre choix.

Pour l'alimentation des commandes dans un Bash interactif, regardez l'option --rcfile.

1

J'imagine que vous souhaitez que votre script soit dynamique, cependant, comme une solution rapide lorsque vous travaillez sur un nouveau système, je crée un alias.

commencent à savoir

env est appelé 'AP1' situé à ~/envs/AP1/avec un référentiel emplacement ~/proj/AP1/

alias AP1 = "source ~/envs/py1/bin/activate; cd ~/proj/py1 /;

fin i.e.

Vous pouvez désormais accéder à votre projet et virtualenv en tapant AP1 partout dans le CLI.

Je sais que ce n'est pas l'idéal proche, viole DRY, et de nombreux autres concepts de programmation. C'est juste une manière rapide et sale de rendre votre env et projet accessible rapidement sans avoir à configurer les variables.

Questions connexes