0

新しいpython仮想環境を作成し、それをアクティブ化し、djangoおよびその他のアプリをインストールするためのシェルスクリプトを作成しています。workon コマンドの実行で問題が発生しています。何か案は?

   1 #!/bin/bash
   2 export WORKON_HOME=$HOME/Development/Python/Django/.virtualenvs
   3 export PROJECT_HOME=$HOME/Development/Python/Django/dev
   4 source /usr/local/bin/virtualenvwrapper.sh
   5 
   6 ENV_NAME="$1"
   7 
   8 #Create the virtual environment
   9 mkvirtualenv $ENV_NAME --no-site-packages
  10 
  11 #workon the newly created environment
  12 workon $ENV_NAME
  13 
  14 #install django
  15 #pip install django
  16 
  17 #install apps
  18 #pip install south
  19 #pip install fabric
  20 #pip install django-debug-toolbar
  21 #pip install django-extensions
  22 #pip install compressor
  23 
  24 exit
  25 

スクリプトが終了した後、環境はアクティブ化されません。

2行目と3行目を追加しようとしましたが、役に立ちませんでした。何か案は?

4

1 に答える 1

1

スクリプトを通常どおり実行すると、サブシェルで実行されます。このスクリプトが行うことは、そのサブシェルの環境を適切に設定することです...そして終了し、シェルの環境はそのままにします。export環境のこれらの部分を親プロセスではなく、サブプロセスに渡します。

これを機能させるにはsource、スクリプトが必要です (または、.ソースの同義語であるコマンドを使用します)。これにより、サブシェルに委任するのではなく、現在のシェルがスクリプトを実行します。

#!実行する必要があるスクリプトのシバン ( ) 行を削除または変更することをお勧めしsourceます。通常のシバンは、それが通常のスクリプトであり、通常どおり実行できることを示します。これは完全に誤解を招くものです。私の個人的な好みは、次のように変更することです。

#!/bin/echo please run this with the source command

...誰かが通常のスクリプトのように実行しようとすると、正しく実行する方法を教えてくれます。

または、実行権限を削除して完了と呼ぶこともできます。

于 2013-09-05T04:28:21.353 に答える