python - Makefile 中的 & 分隔命令
问题描述
我的 Makefile 有以下规则。
init-local-env:
@echo 'initializing python3 local environment in .venv'
python3 -m venv .venv && source .venv/bin/activate
但不会带我进入我的虚拟环境。似乎只有命令的第一部分是由 Makefile 运行的,因为它已经创建了.venv
文件夹,并且只有在我source .venv/bin/activate
在终端上运行之后,它才会将我带到环境中。
但是,如果我在终端上运行这两个命令,它会毫无问题地运行,并且它也会将我带到环境中。
python3 -m venv .venv && source .venv/bin/activate
我试图if
通过引用这个问题来使用一个子句。
init-local-env:
@echo 'initializing python3 local environment in .venv'
if [ -z "$$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
但它似乎也不起作用。它给了我以下输出并创建.venv
文件夹,但不执行第二个命令。
bash$ make init-local-env
initializing python3 local environment in .venv
if [ -z "$(python3 -m venv .venv)" ]; then \
source .venv/bin/activate; \
fi
任何想法,我做错了什么?我怎样才能一个接一个地运行这两个命令(使用 && )?
解决方案
makefile 规则的每一行都由一个单独的 shell 执行。因此,在source .venv/bin/activate
执行后它会终止该 shell 并在下一行开始一个新的,而没有source .venv/bin/activate
.
您可以让 GNU make 在一个 shell 中执行所有行,请参阅Using One Shell。
推荐阅读
- networking - Omnetpp - 在列表/向量中显示模拟拓扑(节点、链接等)
- java - 如何在 2 个数据中心配置 consul-replicate 以进行灾难恢复?
- reactjs - 为什么我不能将道具分配给常量并渲染它
- javascript - 正则表达式匹配其 url 以 image.extention(png,jpg,...) 结尾的所有选项卡,包括本地文件 url(file:///)
- sql - 如何返回一个值在两个表中但另一个值仅在一个表中的值?
- python - 检索 AttributeError 的问题:“DataFrame”对象没有属性“Frame”
- r - 从起点到终点将excel导入R
- assembly - 从堆栈寄存器中弹出时,高 8 位寄存器会发生什么?
- unit-testing - JUnit 发布测试结果在 Azure DevOps 中不起作用
- apache - 如何将一个页面重定向到另一个页面,然后将所有剩余页面重定向到新站点