私は(私が思ったように)簡単なbashスクリプトを書くつもりです:
- $ 1で新しい環境を作るためにvirtualenvを走らせる
- 仮想環境をアクティブにする
- (djangoをインストールし、django-admin.pyをvirtualenvのパスに追加するなど)
ステップ1は非常にうまくいくが、virtualenvを有効にしているように見えることはできない。 activate
仮想環境をアクティブにするファイル。 CLIから、次のコマンドを使用して実行します。 source
source $env_name/bin/activate
$ env_nameは、明らかに、仮想envがインストールされているディレクトリの名前です。
私のスクリプトでは、仮想環境を作成した後、次のようにactivateスクリプトのパスを保存します。
activate="`pwd`/$ENV_NAME/bin/activate"
しかし私が電話するとき source "$activate"
、私はこれを得る:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
そんなこと知ってる $activate
実際には私が呼び出す前にファイルが存在することをテストすることさえできます source
。しかし source
それ自体は見つからないようですが、私はすべてのステップを手動でCLIで実行してみましたが、すべてがうまくいきました。
私の研究では、私は見つけた このスクリプトこれは私が欲しいものに似ていますが、また〜/ .virtualenvディレクトリ(または$ WORKON_HOMEにあるもの)にすべての仮想環境を格納するなど、必要のないたくさんのことをやっています。 activate
、および呼び出し source "$activate"
基本的には私と同じです。
ここにスクリプトがあります。
#!/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
免責事項:私のbashスクリプト-fuはかなり弱いです。私はCLIでかなり快適ですが、これはうまくいかない非常に愚かな理由があるかもしれません。
回答:
回答№1の183bashスクリプトを書いているなら、それを名前で呼んでください:
#!/bin/bash
/ bin / shはbashであるとは保証されません。これは、数年前にUbuntuで大量の壊れたスクリプト(IIRC)を引き起こしました。
ソース組み込み関数はbashでうまく動作します。ノーマンのようにドットを使うこともできます。
回答№2 148
POSIX標準では、 /bin/sh
尊重されると思われる場合、コマンドは .
(単一のドット)、ない source
。ザ source
コマンドは csh
- それが引き込まれた bash
.
試す
. $env_name/bin/activate
あるいは、POSIX以外のものが必要な場合 bash
あなたのコードには、 #!/bin/bash
.
答え№3の22
Ubuntuでは、あなたがスクリプトを sh scriptname.sh
この問題が発生します。
スクリプトを ./scriptname.sh
代わりに。