Ich versuche zu schreiben (was ich dachte wäre) einen einfachen Bash-Skript, das wird mit Quelle:eine ‚Quelle: nicht gefunden‘ Erste Fehler, wenn in einem Bash-Skript
- Lauf virtualenv erstellen neue Umgebung bei 1 $
- die virtuelle Umgebung aktiviert
- etwas mehr Dinge tun (installieren django, fügt django-admin.py auf den Weg des virtualenv usw.)
Schritt 1 funktioniert ganz gut, aber ich kann nicht scheinen, die virtualenv zu aktivieren. Für diejenigen, die mit virtualenv nicht vertraut sind, erstellt es eine activate
Datei, die die virtuelle Umgebung aktiviert. Von der CLI, führen Sie es source
source $env_name/bin/activate
Wo $ env_name mit, natürlich, der Name des Verzeichnisses, das die virtuelle env in installiert ist.
In meinem Skript, nachdem die virtuelle Umgebung zu schaffen, ich speichere den Pfad zum activate Skript wie folgt:
activate="`pwd`/$ENV_NAME/bin/activate"
Aber wenn ich source "$activate"
nennen, bekomme ich diese:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Ich weiß, dass $activate
den richtigen Pfad zum aktivieren Skript enthält, in der Tat ich sogar testen, dass eine Datei vorhanden ist, bevor ich source
aufrufen. Aber source
selbst kann nicht scheinen, es zu finden. Ich habe auch versucht, alle Schritte manuell in der CLI auszuführen, wo alles gut funktioniert.
In meiner Forschung fand ich this script, die ähnlich ist, was ich will, aber macht auch viele andere Dinge, die ich nicht brauche, wie die Speicherung aller virtuellen Umgebungen in einem ~/.virtualenv-Verzeichnis (oder was auch immer in $ WORKON_HOME ist). Aber es scheint mir, dass er den Pfad zu activate
erstellt und source "$activate"
auf die gleiche Weise aufruft, wie ich bin. Hier
ist das Skript in seiner Gesamtheit:
#!/bin/sh
PYTHON_PATH=~/bin/python-2.6.1/bin/python
if [ $# = 1 ]
then
ENV_NAME="$1"
virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
activate="`pwd`/$ENV_NAME/bin/activate"
if [ ! -f "$activate" ]
then
echo "ERROR: activate not found at $activate"
return 1
fi
source "$activate"
else
echo 'Usage: djangoenv ENV_NAME'
fi
HAFTUNGSAUSSCHLUSS: My Bash-Skript-fu ziemlich schwach ist. Ich bin ziemlich zufrieden mit dem CLI, aber es kann durchaus ein extrem dummer Grund dafür sein, dass das nicht funktioniert.
Diese Lösung war ursprünglich ein Kommentar in Norman Ramseys Antwort. Da dies das Problem tatsächlich behoben hat, habe ich das geändert, um die "akzeptierte Antwort" –
Richtige Antwort ist Ramsey ist nicht Waffen ". – Enzo