Я пытаюсь выполнить следующую subst
команду, чтобы заменить одну строку /var/jenkins_home
другой /srv/jenkins-slave-1/data
так, чтобы значение HOST_LOG_DIR
изменилось с /var/jenkins_home/workspace/ts_myapp_testing_integration-tests
на
/srv/jenkins-slave-1/data/workspace/ts_myapp_testing_integration-tests
но когда я запускаю целевой makefile, substtest
значение HOST_LOG_FILE
остается неизменным (см. скриншот).
WORKSPACE := "/var/jenkins_home/workspace/ts_myapp_testing_integration-tests"
JENKINS_HOME := "/var/jenkins_home"
JENKINS_HOME_HOST_PATH := "/srv/jenkins-slave-1/data"
HOST_LOG_DIR := $(subst $(JENKINS_HOME),$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))
.PHONY: substtest, print_env
substtest: print_env
print_env:
@echo "WORKSPACE is ${WORKSPACE}"
@echo "JENKINS_HOME is ${JENKINS_HOME}"
@echo "JENKINS_HOME_HOST_PATH is ${JENKINS_HOME_HOST_PATH}"
@echo "HOST_LOG_DIR is ${HOST_LOG_DIR}"][1]][1]
Странно, когда я заменяю $(JENKINS_HOME)
фактическим значением пути /var/jenkins_home
, т.е.
HOST_LOG_DIR := $(subst /var/jenkins_home,$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))
тогда это работает так, как и ожидалось,
Мне нужно исправить это так, чтобы это работало без жестко закодированной замены.
решение1
JENKINS_HOME := "/var/jenkins_home"
Вам следуетнетЗаключайте в кавычки значения переменных в Makefiles. Это не оболочка, кавычки не являются чем-то особенным и не удаляются.
WORKSPACE := /var/jenkins_home/workspace/ts_myapp_testing_integration-tests
JENKINS_HOME := /var/jenkins_home
JENKINS_HOME_HOST_PATH := /srv/jenkins-slave-1/data
HOST_LOG_DIR := $(subst $(JENKINS_HOME),$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))