我试图运行以下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))
然后它会像预期的那样工作,

我需要修复这个问题,这样它就不需要硬编码的替代。
发布于 2019-06-05 14:16:24
JENKINS_HOME := "/var/jenkins_home“
您应该<#>而不是引用Makefiles中的变量值。这不是shell,引号在任何方面都不是特别的,也不被删除。
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))https://unix.stackexchange.com/questions/523051
复制相似问题