Выход из скобок в правиле Makefile с помощью bash <(curl ...) - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу запустить печально известную комбо bash <(curl SOME_URL) в Makefile, и я борюсь с экранированием скобок.Соответствующая выдержка из Makefile выглядит следующим образом:

foo:
    docker run $(IMAGE_NAME) bash <(curl SOME_URL) \
        --some-param1 \
        --some-param2

Выполнение вышеупомянутого с помощью make foo только приводит к: /bin/sh: 1: Syntax error: "(" unexpected

Может кто-нибудь показать мне, как правильно избежать скобок, чтобы яможно выполнить выше

1 Ответ

0 голосов
/ 25 апреля 2018

Причина в том, что вы не используете оболочку bash.Ваш makefile не использует оболочку Bourne Again (bash), в которой поддерживается подстановка процессов (<()), поэтому система выполняет ее с /bin/sh.Оболочка bourne /bin/sh по умолчанию предназначена для работы только со стандартными функциями.

Используйте SHELL := /bin/bash в вашем Makefile, чтобы сделать оболочку bash по умолчанию для всех рецептов, или вы можете определить ее для каждого рецепта.

foo: SHELL := /bin/bash
foo:
    docker run $(IMAGE_NAME) bash <(curl SOME_URL) \
        --some-param1 \
        --some-param2

От GNU make документация: выбор оболочки .Цитирование из него, чтобы показать фактические строки

Программа, используемая в качестве оболочки, взята из переменной SHELL.Если эта переменная не установлена ​​в вашем makefile, программа /bin/sh используется в качестве оболочки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...