Getting a 'source: not found' error when using source in a bash script
我正在尝试编写一个简单的bash脚本(我认为是这样的脚本),它将:
步骤1工作得很好,但我似乎无法激活virtualenv。对于那些不熟悉virtualenv的人,它创建一个激活虚拟环境的
1 | source $env_name/bin/activate |
其中$env_name显然是安装虚拟env的目录的名称。
在我的脚本中,在创建虚拟环境之后,我将像这样存储到激活脚本的路径:
1 | activate="`pwd`/$ENV_NAME/bin/activate" |
但当我给
1 | /home/clawlor/bin/scripts/djangoenv: 20: source: not found |
我知道
在我的研究中,我发现了这个脚本,它与我想要的相似,但也做了很多我不需要的事情,比如将所有虚拟环境存储在~/.virtualenv目录中(或者$workon_home中的任何目录)。但在我看来,他是在创造通往
以下是完整的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/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上相当舒服,但这可能有一些非常愚蠢的原因不起作用。
如果要编写bash脚本,请按名称调用它:
1 | #!/bin/bash |
/bin/sh不保证是bash。几年前,这在Ubuntu(iirc)造成了大量的脚本损坏。
源代码内置在bash中工作得很好;但是您也可以像诺曼建议的那样使用dot。
在应该尊重
尝试
1 | . $env_name/bin/activate |
或者,如果代码中必须有非posix
在Ubuntu中,如果使用
尝试用