gpt4 book ai didi

bash - 如何让 source 命令在 shell 脚本之外生效?

转载 作者:行者123 更新时间:2023-12-02 01:14:05 26 4
gpt4 key购买 nike

我想编写一个小脚本来获取我的 virtualenv(用于 Python 项目)目录。当我在我的项目目录中的某个地方时,我知道我的虚拟环境的“venv”目录位于一个目录中,该目录是我当前目录的祖先之一。

我想编写一个 shell 脚本,它将源 venv/bin/activate 并且它的效果应该在这个 shell 脚本之外持续存在。现在还没有发生这种情况。

这是我的代码:

#!/bin/bash

#set -x

while [ $PWD != "/" ]; do
#echo $PWD
if [ -d "venv" ]; then
echo "venv found in $PWD. Sourcing."
source venv/bin/activate
break
else
cd ..
fi
done

为什么它现在不起作用,我该如何解决?

编辑:

如果有帮助,venv/bin/activate 的内容在这里:http://pastebin.com/TZ40brsq它由 virtualenv 生成工具(通常用于 Python 项目)。

最佳答案

您必须使用以下命令调用脚本

source path/to/script

. path/to/script

(同样的事情)而不是运行它。这是一种安全措施,当您运行程序时,它无法更改其父进程(即您的 shell session )的环境。但是,当您使用 source 时,您是在告诉 shell 读取文件的内容并运行它,就好像您自己键入了该内容一样。

如果您已经以这种方式获取脚本,那么我不确定发生了什么。

关于bash - 如何让 source 命令在 shell 脚本之外生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com