这行在make文件`DOCKER:= $(shell command -v docker)`中的含义。

西蒙桥

$(shell command -v docker)什么command意思 它正在Makefile中使用。

我在我想了解的github存储库中看到了这一点。

看起来它正在使用命令设置变量以测试是否安装了docker,如果没有安装则停止构建,问题是我没有安装命令,并且尝试在ubuntu中安装命令,但是可以。找不到它,在Internet上查找如何安装此commad命令似乎真的很困难,因为它的名称,它how to install command in linux/ubuntu没有带来任何有用的信息,还搜索了在Makefiles上使用此命令的方法,以寻求一些线索,但到目前为止没有任何帮助。

运行build命令似乎可以正常工作,因为它可以构建映像,是的,我已经安装了docker,但是仍然在终端中收到该消息 make: command: Command not found

任何想法?

生成构建输出(表示):

$ 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 
.....

这是Makefile:

.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的人不够谨慎,无法以可移植的方式编写它。

command命令是外壳程序的一部分(这就是为什么如果您在GNU make手册中查找命令将看不到它的原因)。不仅如此,它还是bash shell的一部分:它不是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.

基本上,运行command docker ...意味着将docker忽略任何命名的shell别名或函数,并且仅docker运行实际命令。

但是,GNU make始终/bin/sh作为其外壳运行,包括用于配方和$(shell ...)功能。

因此,如果您使用的/bin/sh是bash外壳程序的链接的系统(例如Red Hat或CentOS或Fedora GNU / Linux),那么上面的命令将起作用。

但是,如果您使用的系统(例如Debian或Ubuntu GNU / Linux)/bin/sh链接到更简单的POSIX shell(例如破折号),则上述命令将不起作用。

实际上,这是不需要的,因为无论如何,在shell中定义的所有shell别名或函数都不会进行调用。但是,如果作者想要在其makefile中使用bash shell功能并允许它们工作,他们还需要通过将make添加到其makefile中来告知make使用bash作为其shell:

SHELL := /bin/bash

(当然,这假设用户/bin/bash的系统上有一个,但是...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在POSIX shell中是否需要使用command -v选项?posh符合POSIX吗?

来自分类Dev

Shell中@#的含义

来自分类Dev

脚本中的PHP Command与shell的结果不同

来自分类Dev

在ssh shell脚本中检查docker版本

来自分类Dev

在Shell脚本中处理Docker事件

来自分类Dev

在ssh shell脚本中检查docker版本

来自分类Dev

Docker内的Shell脚本

来自分类Dev

Docker卷中“设备”和“挂载点”的含义

来自分类Dev

Docker命令的含义

来自分类Dev

Perl How to make thread to wait till shell complete execution of a command

来自分类Dev

Bash中'2>>((command)')重定向的含义

来自分类Dev

了解在Docker中传递给-v的参数

来自分类Dev

在Windows上运行Docker Shell

来自分类Dev

Docker如何安装Shell函数?

来自分类Dev

HBase Shell command questions

来自分类Dev

如何通过Command来在Shell中打开程序?

来自分类Dev

如何在Jenkins Build Execute Shell中运行docker命令

来自分类Dev

Docker容器中的Alpine Linux忽略了Shell脚本参数

来自分类Dev

在docker-machine中评估:终端vs shell脚本

来自分类Dev

如何在docker映像中应用nix-shell配置?

来自分类Dev

执行不替换Docker入口点脚本中的bash shell

来自分类Dev

在Docker容器中执行Shell脚本时出现ENONENT

来自分类Dev

在docker composer中执行shell命令给我错误

来自分类Dev

在docker composer中执行shell命令给我错误

来自分类Dev

连接到在docker中执行shell后,mongo断开连接

来自分类Dev

如何在 docker 容器中执行 shell 脚本

来自分类Dev

为什么我无法在 shell 脚本中运行 docker 命令

来自分类Dev

在 Bitnami 的 Jenkins 上在 Jenkins shell ubuntu 中运行 Docker 命令

来自分类Dev

U和V在getU()中的含义

Related 相关文章

热门标签

归档