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

如何使用bash脚本激活pythonvirtualenv并在脚本完成后保留它?,python,bash,virtualenv,Python,Bash,Virtualenv,我像往常一样创建了一个新的PythonVenV:python-m venv.venv 我需要创建一个bash脚本,它可以激活这个venv并在完成后保持该状态 我知道,激活venv的正常解决方案是从终端调用source.venv/bin/activate,或者通过别名使用它 但是我在bash脚本中需要这个特性,它为我的开发做了很多其他有用的事情 我试着用一种简单的方式: my-script.sh: #!/bin/bash source ".venv/bin/activate" echo $VIR

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

我需要创建一个bash脚本,它可以激活这个venv并在完成后保持该状态

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

但是我在bash脚本中需要这个特性,它为我的开发做了很多其他有用的事情

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

my-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做这样的事情:

$pv

1) 如果已激活venv,则不执行任何操作

2) 如果存在.venv文件夹,则激活该venv并返回激活的venv bash提示符


3) 如果没有.venv文件夹,首先创建venv,然后激活它。并返回激活的venv bash提示符。

不,您不能这样做,因为当您像这样运行脚本时,它会运行子shell中的所有内容,完成后会被销毁

。。。但这很容易理解

source./my script.sh
,它不会创建新的子shell来运行它


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

我更新了问题,解释了为什么需要通过脚本激活venv。我需要它来编写我的脚本
p
,它有很多不同的python、pip、twine等帮助命令。我希望能够通过我的脚本
p
和venv做这样的事情:
$pv
1)如果已经激活了venv,什么都不做2)如果有.venv文件夹,激活venv并返回激活的venv bash提示符。3) 如果没有.venv文件夹,首先创建venv,然后激活它。并返回激活的venv bash提示符。看起来您是对的,不可能从脚本激活python venv并在退出后在控制台中保持此状态:(