【问题标题】:Problem while running bash script with source command使用 source 命令运行 bash 脚本时出现问题
【发布时间】:2020-08-14 12:33:00
【问题描述】:

我必须激活虚拟环境 (venv),所以我在终端中手动运行这些命令:

source .venv/bin/activate     # To activate the virtual env.

deactivate                    # To deactivate the virtual env

手动运行时效果很好。现在我必须在 bash 脚本中插入这些命令,以使 AWS CodeDeploy 将其部署在 Ubuntu 18.04 服务器上。

我的名为 after_install.sh 的 bash 脚本看起来像这样......

#!/usr/bin/env bash

set -e
source .venv/bin/activate
## DO SOME STUFF ##
deactivate

对于本地测试,我使脚本可执行并使用bash after_install.sh 运行脚本。但是什么也没发生。它不会激活虚拟环境。运行 bash 脚本时,上述命令似乎都不起作用。

当我手动运行这些命令而不是使用 bash 脚本时,我不明白为什么这些命令可以工作。到底是怎么回事?我需要在 bash 脚本中编写这些命令,以便 AWS CodeDeploy 可以将其部署在服务器上。

【问题讨论】:

  • 你为什么用set -e

标签: python linux bash amazon-web-services ubuntu


【解决方案1】:

在这种情况下不要依赖activate。在您的脚本之外执行source activate,然后检查您的PATH。复制 PATH 的值并在脚本中将操作路径设置为复制的值:

#!/usr/bin/env bash
setenv PATH='copied_value_of_path'
# do stuff

此时我必须假设您将在“做一些事情”部分中运行一个或多个 python 脚本。编辑脚本并确保您具有以下内容:

#!/bin/env python

作为每个脚本的第一行。这是让 shell 知道该脚本使用哪个解释器的 shell 脚本约定。

【讨论】:

  • 我已经复制了运行source activate给出的路径,之后我如何使用它来激活环境。
  • 为我的回答添加了更多细节。这有帮助吗?
猜你喜欢
  • 2021-05-17
  • 2013-01-21
  • 2016-08-12
  • 2015-12-17
  • 2015-09-20
  • 2014-03-24
  • 2010-09-19
  • 1970-01-01
  • 2019-12-26
相关资源
最近更新 更多