在 bash 脚本中使用源时出现“源:未找到”错误

2024-06-18

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

  1. 运行 virtualenv 以 1 美元创建一个新环境
  2. 激活虚拟环境
  3. 做更多的事情(安装 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. But source自己好像也找不到。我还尝试在 CLI 中手动运行所有步骤,一切正常。

在我的研究中我发现这个脚本 http://www.doughellmann.com/articles/CompletelyDifferent-2008-05-virtualenvwrapper/Listing1.html,这与我想要的类似,但也做了很多我不需要的其他事情,例如将所有虚拟环境存储在 ~/.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 相当满意,但很可能有一些极其愚蠢的原因导致它不起作用。


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

#!/bin/bash

/bin/sh 不保证是 bash。几年前,这导致 Ubuntu 中出现大量损坏的脚本(IIRC)。

内置的源代码在 bash 中工作得很好;但你也可以像诺曼建议的那样使用点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 bash 脚本中使用源时出现“源:未找到”错误 的相关文章

随机推荐

  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • Python:有类似matlab的反斜杠运算符吗?

    Matlab 和 Julia 有反斜杠运算符来求解线性系统 我真的不知道 Matlab 是做什么的 但是 Julia 不计算逆函数 但它计算逆函数对给定向量的影响 这在计算上更容易 我有一个 numpy 稀疏矩阵 我想将其伪逆应用于向量 P
  • 如何使用actionbarsherlock创建自定义下拉菜单?

    所以 我试图模仿潘多拉的菜单之类的东西 如果您可以选择点击右上角的菜单按钮或图标 无论哪种方式 它都会显示相同的下拉菜单列表 我尝试过创建 溢出 菜单 但在较旧的设备上 我发现该菜单仍然出现在底部 我不想要 所以我创建了一个Spinner并
  • 如何检查 ini_set() 是否在全局 PHP.INI 或我的 PHP 脚本中启用?

    我有一个应用程序安装失败 供应商说我可能禁用了 ini set 我怎样才能检查这个 我对此做了一些研究 结果发现有时 ini set 不会返回 FALSE 而是一个空字符串 gabriel1836 指出的 URL 中提到了这一点 检查它是否
  • 如何在initialize()中使用define_method

    尝试使用define method inside initialize但得到未定义的方法define method 我究竟做错了什么 class C def initialize n define method n puts some me
  • Fluent Nhibernate 如何在 SubclassMap 中指定 Id()

    我正在使 Fluent NHibernate 适应我们现有的遗留应用程序 并尝试确定如何将 ClassMap 和 SubclassMap 用于所示的实体层次结构 BaseObject contains database columns co
  • 数据帧初始化 - 字符初始化读取为因素?

    我正在尝试初始化这样的数据框 因为我想要一个空数据框 其中两个字符向量作为列 out frame lt data frame Hospital character State character 但是 当我查看该数据框的每一列的类时 它显示
  • 使用多处理池更新 Django 模型会锁定数据库

    我使用 Jupyter Notebook 来处理我存储在 django postgres 中的数据 我这样初始化我的项目 sys path append srv gr prg os environ setdefault DJANGO SET
  • 从 .NET 设置系统时区

    有没有人有一些代码可以从 NET 获取 TimeZoneInfo 字段并执行互操作代码以通过 SetTimeZoneInformation 设置系统时区 我意识到它基本上是将 TimeZoneInfo 成员映射到结构成员 但对我来说 这些字
  • Swift:二元运算符“==”不能应用于“协议”类型的操作数

    我有一个协议 protocol ProfileManagerDelegete func dataHaveUpdated type ReturnType 并创建一个协议数组 并添加 删除侦听器 var listeners ProfileMan
  • 在 Jquery - jTable 创建/更新模式中的字段末尾添加自定义按钮,如提交按钮

    在 jquery jTable 中 我们可以有一些字段和操作 我需要 Jquery JTable 按钮 提交 按钮 附近的其他按钮 可能在页面末尾 单击后运行另一个函数 所以 这是我的代码 RequestSubmitDiv jtable t
  • 这是演员还是建筑?

    读完教科书上的一些内容后 我有点困惑 关于代码 void doSomeWork const Widget w Fun stuff doSomeWork Widget 15 doSomeWork 需要一个const Widget 范围 教科书
  • 如何将slug添加到asp.net core网站中的所有链接生成中?

    我需要能够控制我的生成的链接Url Content 调用以能够在链接的开头接受 Slug 基本上 托管 URL 将位于负载平衡器后面 并且可能位于根级别或位于更友好的 Url 后面 举个例子 该站点配置为在以下环境下运行http 本地主机
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • 如何外部化 json-ld 并包含在 html 文档中

    是否可以外部化 json ld 并将其包含在 html 文档中 如下所示 网上好像没有这方面的文档 你不能那样做 你应该得到json与AJAX要求 你可以轻松做到jQuery JS function getJSON data123 json
  • 使用函数和中点在 C++ 中对 Gusser 进行编号

    我正在尝试使用函数编写数字猜测器的代码 playOneGame 函数的返回类型应为 void 它应该在 1 到 100 的范围内实现一个完整的猜谜游戏 shouldPlayAgain 函数应具有布尔返回类型 它应该提示用户确定是否要再次玩
  • 在 Jenkins Pipeline 的一个步骤中添加多个阶段

    我正在尝试获得一个并行运行 2 个步骤的管道 其中 YAML 如下所示 steps step Step1 stages stage Build steps build a build b build c stage Sniff steps
  • 设置img src而不发出请求

    作为构建复制和粘贴代码的一部分 我们必须使用 dom 元素 并将文本 其他 dom 元素附加到其中 最终结果将是要复制的代码 但是 当附加图像元素时 浏览器always发出对图像 src 的请求 有什么办法解决吗 i e var img d
  • 如何在没有接口的情况下模拟多重继承?

    如何在不使用接口的情况下在 C 中模拟多重继承 我确实相信 接口能力不适用于此任务 我正在寻找更多面向 设计模式 的方式 就像 Marcus 所说 使用接口 扩展方法来制作像 mixins 这样的东西可能是你目前最好的选择 另请参阅 使用接
  • 在 bash 脚本中使用源时出现“源:未找到”错误

    我正在尝试编写 我认为的 一个简单的 bash 脚本 它将 运行 virtualenv 以 1 美元创建一个新环境 激活虚拟环境 做更多的事情 安装 django 将 django admin py 添加到 virtualenv 的路径等