Use la ruta absoluta en lugar de la ruta relativa, luego funcionará.
Ej.:
ln -s /home/user/test/src /home/user/test/firefox
Существует ряд проблем с вашим Makefile (, помимо вопроса о том, является ли Makefile подходящим решением):
docker ps -a
возвращает информацию обо всех известных контейнерах, включая незапущенные -контейнеры; Следующие работы:
result = $(shell docker ps -f name=myapp -q | wc -l)
start_docker_myapp:
ifeq ($(strip $(result)),1)
@echo true
else
@echo false
endif
.PHONY: start_docker_myapp
Чтобы установить значение переменной внутри цели, вы должны использовать синтаксис eval
:
start_docker_myapp:
$(eval result = $(shell (docker ps -a | grep myapp ) | wc -l ))
@echo "result is " result
endif
Кроме того, вы можете оценить эту переменную вне правила:
result = $(shell (docker ps -a | grep myapp ) | wc -l )
start_docker_myapp:
@echo "result is " result
endif
Вместо того, чтобы реализовывать сочетание кода сценария оболочки и переменных make, я предлагаю реализовать это как чистый сценарий оболочки, интегрированный в Makefile
.
Вместо проверки вывода grep
с wc
и сравнения числа вы можете просто проверить код выхода grep
.
# don't forget to declare start_docker_myapp as a phony target
.PHONY: start_docker_myapp
# Assuming you intended to use Make variables everywhere, I changed all ${VAR} to $(VAR).
# If your grep supports option -q you can use this instead of redirection to /dev/null.
start_docker_myapp:
if docker ps -a | grep myapp >/dev/null; \
then \
echo 'true'; \
# docker restart $(IMAGE); \
else \
echo 'false'; \
# docker run -v $(DIR)/var/log/docker:/var/log/myapp -p 1812:1812/udp -p 1813:1813/udp --detach --name $(IMAGE) $(REGISTRY)/$(IMAGE):$(TAG); \
fi
Или с логическими операторами вместоif...then...
.PHONY: start_docker_myapp
start_docker_myapp:
docker ps -a | grep myapp >/dev/null && docker restart $(IMAGE) || docker run -v $(DIR)/var/log/docker:/var/log/myapp -p 1812:1812/udp -p 1813:1813/udp --detach --name $(IMAGE) $(REGISTRY)/$(IMAGE):$(TAG)