如何使用 bash 脚本激活 python virtualenv 并在脚本完成后保留它?

How to activate a python virtualenv using a bash script and keep it after the script finishing?

我像往常一样创建了一个新的 python venv:python -m venv .venv

我需要创建一个 bash 脚本来激活这个 venv 并在完成后保持那个状态。

我知道,激活 venv 的正常解决方案是从终端调用 source .venv/bin/activate 或通过别名使用它。

但是我的 bash 脚本需要这个功能,它可以为我的开发做很多其他有用的事情。

我试着用一种简单的方式来做:

我的-script.sh:

#!/bin/bash

source ".venv/bin/activate"
echo $VIRTUAL_ENV

当脚本为运行时,venv被激活,我通过$VIRTUAL_ENV查看。 但是完成后,状态丢失:

max@mbp t3 $ ./my-script.sh
/Users/max/t3/.venv
max@mbp t3 $ echo $VIRTUAL_ENV

max@mbp t3 $

是否可以在完成脚本后保留激活的 venv?

我的脚本 p 需要它,它有很多不同的帮助命令 python、pip、twine 等

我希望能够用我的脚本 p 和 venv 来做这样的事情:

$ p v

1)如果已经有激活的venv,什么都不做

2) 如果有.venv 文件夹,激活venv 和return ACTIVATED venv bash 提示符。

3) 如果没有.venv文件夹,先创建venv,然后激活。还有 return ACTIVATED venv bash 提示符。

不,你不能那样做,因为当你 运行 你的脚本那样时,它 运行 子 shell 中的所有东西在完成后都会被销毁

...但很容易

source ./my-script.sh 不会在

中为 运行 创建新的子 shell

(或更常见的别名 . ./my-script.sh