作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个小脚本来获取我的 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/
我是一名优秀的程序员,十分优秀!