我有以下makefile:
.PHONY: backup other
REMOTE_HOST := server1
DOMAIN_NAME := vm1
VM_IS_RUNNING := $(shell ssh $(REMOTE_HOST) virsh domstate "$(DOMAIN_NAME)")
ifneq ($(.SHELLSTATUS), 0)
$(error SSH command failed with status $(.SHELLSTATUS))
endif
################################################################################
backup:
ifeq ($(VM_IS_RUNNING),running)
@echo "VM $(DOMAIN_NAME) is running."
@exit 0
else
@echo "VM $(DOMAIN_NAME) is NOT running."
@exit 0
endif
################################################################################
other:
@echo "hello"
首先,我设置一些稍后在目标
backup
中使用的变量,然后我有目标backup
本身,最后我有另一个不相关的目标other
。
如何在不设置第一个目标所需的连接变量的情况下运行目标
other
?
我尝试将它们移至备份部分,但没有成功
如果您只想在
backup
命令中计算值,则应仅在 backup
命令中计算值。删除 VM_IS_RUNNING
进行变量赋值,并更改 backup
以将操作作为配方的一部分执行:
backup:
running=$$(ssh $(REMOTE_HOST) virsh domstate "$(DOMAIN_NAME)"); \
@if test "$$running" = running; then \
echo "VM $(DOMAIN_NAME) is running."; \
else \
echo "VM $(DOMAIN_NAME) is NOT running."; \
fi