这一行在make文件`DOCKER:=$(shell命令-v DOCKER)中的含义`
$shell命令-v docker命令是什么意思?它正在生成文件中使用 我在github存储库中看到了这一点,我正在努力理解它 看起来它正在用一个命令设置一个变量来测试是否安装了docker,如果没有,则停止构建,问题是我没有安装命令,我尝试在ubuntu中安装命令,但它找不到,在internet上查看如何安装这个commad命令似乎很困难,因为它的名称,如何在linux/ubuntu中安装命令并没有带来任何有用的东西,也在makefile上搜索这个命令,试图获得一些线索,但到目前为止什么都没有 运行build命令似乎很有效,因为它构建了映像,是的,我已经安装了docker,但仍然在终端make:command:command not found中收到该消息 有什么想法吗 使生成输出结构化:这一行在make文件`DOCKER:=$(shell命令-v DOCKER)中的含义`,shell,makefile,Shell,Makefile,$shell命令-v docker命令是什么意思?它正在生成文件中使用 我在github存储库中看到了这一点,我正在努力理解它 看起来它正在用一个命令设置一个变量来测试是否安装了docker,如果没有,则停止构建,问题是我没有安装命令,我尝试在ubuntu中安装命令,但它找不到,在internet上查看如何安装这个commad命令似乎很困难,因为它的名称,如何在linux/ubuntu中安装命令并没有带来任何有用的东西,也在makefile上搜索这个命令,试图获得一些线索,但到目前为止什么都没有
$ make build
make: command: Command not found
make: command: Command not found
docker build -t codelytv/typescript-ddd-skeleton:dev .
Sending build context to Docker daemon 1.023MB
.....
这是生成文件:
.PHONY = default deps build test start clean start-database
IMAGE_NAME := codelytv/typescript-ddd-skeleton
SERVICE_NAME := app
# Test if the dependencies we need to run this Makefile are installed
DOCKER := $(shell command -v docker)
DOCKER_COMPOSE := $(shell command -v docker-compose)
deps:
ifndef DOCKER
@echo "Docker is not available. Please install docker"
@exit 1
endif
ifndef DOCKER_COMPOSE
@echo "docker-compose is not available. Please install docker-compose"
@exit 1
endif
default: build
# Build image
build:
docker build -t $(IMAGE_NAME):dev .
# Run tests
test: build
docker-compose run --rm $(SERVICE_NAME) bash -c 'npm run build && npm run test'
# Start the application
start: build
docker-compose up $(SERVICE_NAME) && docker-compose down
# Clean containers
clean:
docker-compose down --rmi local --volumes --remove-orphans
# Start mongodb container in background
start_database:
docker-compose up -d mongo
这意味着编写这个makefile的人没有足够小心地以可移植的方式编写它 命令是shell的一部分,这就是为什么如果在GNU make手册中查找它,您将看不到它。不仅如此,它还是bashshell的一部分:它不是POSIX sh标准命令。bash手册页上说:
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed.
基本上,运行命令docker。。。表示忽略任何名为docker的shell别名或函数,并且只运行实际的docker命令
然而,GNU make总是运行/bin/sh作为它的shell,包括菜谱和$shell。。。功能
因此,如果您在诸如Red Hat、CentOS或Fedora GNU/Linux之类的系统上,其中/bin/sh是指向bash shell的链接,那么上面的命令将起作用
但是,如果您在Debian或Ubuntu GNU/Linux等系统上,其中/bin/sh是指向更简单的POSIX shell(如dash)的链接,那么上述命令将无法工作
实际上,这是不需要的,因为无论如何,在shell中都不会定义任何shell别名或函数来进行调用。但是,如果作者希望在其makefile中使用bash shell功能并允许它们工作,他们还需要告诉make使用bash作为其shell,方法是将以下内容添加到其makefile中:
SHELL := /bin/bash
当然,这假设用户在他们的系统上有一个/bin/bash,但是…这意味着编写这个makefile的人没有足够小心地以可移植的方式编写它 命令是shell的一部分,这就是为什么如果在GNU make手册中查找它,您将看不到它。不仅如此,它还是bashshell的一部分:它不是POSIX sh标准命令。bash手册页上说:
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed.
基本上,运行命令docker。。。表示忽略任何名为docker的shell别名或函数,并且只运行实际的docker命令
然而,GNU make总是运行/bin/sh作为它的shell,包括菜谱和$shell。。。功能
因此,如果您在诸如Red Hat、CentOS或Fedora GNU/Linux之类的系统上,其中/bin/sh是指向bash shell的链接,那么上面的命令将起作用
但是,如果您在Debian或Ubuntu GNU/Linux等系统上,其中/bin/sh是指向更简单的POSIX shell(如dash)的链接,那么上述命令将无法工作
实际上,这是不需要的,因为无论如何,在shell中都不会定义任何shell别名或函数来进行调用。但是,如果作者希望在其makefile中使用bash shell功能并允许它们工作,他们还需要告诉make使用bash作为其shell,方法是将以下内容添加到其makefile中:
SHELL := /bin/bash
当然,这假设用户的系统上有一个/bin/bash,但是