/ /ソースをbashスクリプトで使用しているときに 'source:not found'エラーが表示される - bash、virtualenv

ソースをbashスクリプトで使用しているときに 'source:not found'エラーが表示される - bash、virtualenv

私は(私が思ったように)簡単なbashスクリプトを書くつもりです:

  1. $ 1で新しい環境を作るためにvirtualenvを走らせる
  2. 仮想環境をアクティブにする
  3. (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の183

bashスクリプトを書いているなら、それを名前で呼んでください:

#!/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 代わりに。