【问题标题】:source activate env_name command failed源激活 env_name 命令失败
【发布时间】:2019-12-07 09:22:33
【问题描述】:

我想运行这段代码:

#! /bin/sh

env_name="base"
source activate $env_name

在我的 shell 中为 sh filename.sh,但错误提示:

filename.sh: source: not found

下面一行:

filename.sh: Syntax error: Unterminated quoted string

有什么问题?可以说我可以在 shell 中手动运行这个命令,但是当我尝试作为 shell 脚本运行时,这个问题给了我错误。任何帮助表示赞赏。

【问题讨论】:

    标签: shell conda


    【解决方案1】:

    在 POSIX shell 中没有名为 source 的命令。要获取文件,请使用句点,即

    . filename.sh
    

    【讨论】:

      【解决方案2】:

      选项

      您有三个选择:

      1. 登录模式 - 在登录模式下使用 shell,自动设置 Conda 的 shell 功能。
      2. 手动初始化 - 您可以手动获取适合 shell 的初始化脚本,以在脚本中启用 conda activate 功能。
      3. conda run - 您让 Conda 为您自动激活环境。

      1:登录方式

      典型的 Conda 安装让用户为其主 shell 运行 conda init,这会将代码添加到用户的特定于 shell 的资源文件(例如,.bashrc)。 OP 运行脚本的当前方式和脚本的 shebang 永远不会加载这样的资源,因此不定义 conda activate 函数。

      相反,重新定义 shebang 以使用完整的 shell 并在登录模式下运行。例如,这将是 BASH 版本:

      #!/usr/bin/env bash -l
      

      并与任一运行

      . filename.sh
      

      bash -l filename.sh
      

      这假设用户已经运行conda init bash


      2:手动初始化

      conda activate 功能通常是 Conda 在启动交互式 shell 时创建的 shell 函数。要在脚本中使用相同的功能,您可以手动运行初始化脚本。假设一个bash 类型的shell,它位于etc/profile.d/conda.sh 的基本Anaconda/Miniconda 目录下。假设您在以下位置拥有它:

      /Users/user/miniconda3/etc/profile.d/conda.sh
      

      你的脚本的工作版本会变成这样的

      #!/bin/sh
      
      . /Users/user/miniconda3/etc/profile.d/conda.sh
      conda activate base
      
      ...
      

      3:康达运行

      您可以在 shebang 中使用conda run(参见conda run --help)来自动激活环境并在该上下文中运行脚本中的所有内容。这假设您拥有properly configured your shell to use conda。例如,

      #!/usr/bin/env conda run -n base bash
      
      some_cmd
      

      some_cmd 是您的环境中可用的命令行程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 2023-03-31
        • 2023-04-03
        • 1970-01-01
        • 2023-03-20
        • 2015-05-25
        • 2016-10-26
        • 1970-01-01
        相关资源
        最近更新 更多