2011-09-10 21 views
34

以下のようなシェルスクリプトを使ってVirtualEnvを起動しようとしましたが、動作しないようです。シェルスクリプトを使ってVirtualEnvを有効にしても動作しないようです

#!/bin/sh 
source ~/.virtualenvs/pinax-env/bin/activate 

次のエラーが表示されます。

$ sh virtualenv_activate.sh 
virtualenv_activate.sh: 2: source: not found 

それは動作するようです

$ source ~/.virtualenvs/pinax-env/bin/activate 
(pinax-env)[email protected]:$ 

だから、シェルスクリプトを

#!/bin/bash 
source ~/.virtualenvs/pinax-env/bin/activate 

に変更し、

$ bash virtualenv_activate.sh 
[email protected]:$ 

を使ってスクリプトを実行しました。

これはエラーを投げるわけではありませんが、どちらも仮想envを有効にしません

どのようにこの問題を解決するための提案?

PS:私はUbuntu 11.04

を使用しています。
+1

試してみてください 'bash virtualenv_activate.sh' – arunkumar

+1

あなたは答えとして精巧に投稿してください。 – Gautam

答えて

39

shがbashのと同じではありません。あなたはshをbashの流布したバージョンと考えることができます。 bashがshが持っていないことの1つは "source"コマンドです。これは、あなたがそのエラーを取得している理由です...ソースはあなたのbashシェルで正常に動作します。しかし、shを使ってスクリプトを起動するときは、サブプロセス内のシェルでスクリプトを実行します。そのスクリプトはshで実行されているので、 "source"は見つかりません。

代わりに、スクリプトをbashで実行します。

./virtualenv_activate.sh 

...か...

/bin/bash virtualenv_activate.sh 

編集...を実行し

#!/bin/bash 

に...への最初の行を変更virtualenvを有効にして、スクリプトを呼び出すシェルを変更したい場合は、 「ソース」または「ドット演算子」を使用します。これはこれは、サイドノートとして...スクリプトが(したがって、現在の環境を変更)現在のシェル内で実行されていることを

source virtualenv_activate.sh 

...か...

. virtualenv_activate.sh 

を保証しますなぜvirtualenvは、あなたはそれが活性化スクリプトを実行するために "ソース"を使用する必要があると言います。  

+1

を使用するか、ソースの等価シェル相当物を使用してください。 envFile'と呼ばれ、しばしば 'envFileに点'と呼ばれる。幸運;-) – shellter

+1

ありがとう、しかし、問題を解決するように見えない、私はbashを使用すると、それはエラーをスローしませんどちらもそれはvirtualenvを有効にしません。 .envFile – Gautam

+5

これらのスクリプトを私が示したように実行すると、実際には新しいシェルが作成され、そのシェルでスクリプトが実行されます。 "ソース"スクリプトの全体が現在のシェルを変更することになるので、これは目的を破るものです。 「source virtualenv_activate.sh」または「。virtualenv_activate.sh」を使用してスクリプトを実行します(最初の期間の後のスペースに注意してください)。 –

3

sourceは、bashの組み込みシェルコマンドであり、shでは使用できません。私が正しく覚えていれば、仮想envは多くのパスと環境変数の操作を行います。 bash virtualenv_blah.shとして動作させても、サブ・シェルの内部に環境が作成されるため、動作しません。

Try . virtualenv_activate.shまたはsource virtualenv_activate.shこれは基本的に現在の環境でスクリプトを実行し、virtualenvのactivateによって変更されたすべての環境変数が利用可能になります。

HTH。

編集:ここでは役立つかもしれないリンクがある - http://ss64.com/bash/period.html

4

のMac OS Xにあなたの提案に動作していないようです。

私はこのようにしました。多分誰かが示唆することは、ソリューションに非常に満足し、とにかくここでそれを共有し、希望I'amない良い方:chmod +x activate.sh

:私はで実行権限を与える

echo 'source /Users/andi/.virtualenvs/data_science/bin/activate' 

を持ってactivate.sh

そして、私はこの方法を実行します。paranthesisはASCIIコードの形式であること

`./activate.sh` 

は注意してください96 = `(GRAV eアクセント)

関連する問題