当前位置:  开发笔记 > 编程语言 > 正文

在bash脚本中使用source时出现'source:not found'错误

如何解决《在bash脚本中使用source时出现'source:notfound'错误》经验,为你挑选了3个好方法。

我正在尝试编写(我认为会是)一个简单的bash脚本,它将:

    运行virtualenv以1美元创建一个新环境

    激活虚拟环境

    做更多的东西(安装django,将django-admin.py添加到virtualenv的路径等)

第1步工作得很好,但我似乎无法激活virtualenv.对于那些不熟悉virtualenv的人,它会创建一个activate激活虚拟环境的文件.在CLI中,您可以使用它运行它source

source $env_name/bin/activate

其中$ env_name显然是安装虚拟环境的目录的名称.

在我的脚本中,在创建虚拟环境之后,我将激活脚本的路径存储如下:

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 script-fu非常弱.我对CLI很满意,但可能有一些非常愚蠢的原因,这是不起作用的.



1> guns..:

如果您正在编写bash脚本,请按名称调用它:

#!/bin/bash

/ bin/sh不保证是bash.几年前,这导致了Ubuntu中大量破碎的脚本(IIRC).

源内置在bash中运行得很好; 但你可能只是像诺曼建议的那样使用点.



2> Norman Ramse..:

/bin/sh应该遵守的POSIX标准中,命令是.(单个点),而不是source.这个source命令是一种csh已被拉入的主义bash.

尝试

. $env_name/bin/activate

或者,如果您bash的代码中必须包含非POSIX主题,请使用#!/bin/bash.


根据[Bash手册](https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-source),`source`是`.`的同义词.

3> 小智..:

在Ubuntu中如果你执行脚本sh scriptname.sh就会遇到这个问题.

请尝试执行脚本./scriptname.sh.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有