الهروب من الأقواس في قاعدة Makefile باستخدام bash <(curl ...)

I want to run the infamous bash <(curl SOME_URL) combo in a Makefile and I'm struggling with escaping of the parenthesis. The relevant excerpt from the Makefile looks like this:

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

Running the above via make foo only yields: /bin/sh: 1: Syntax error: "(" unexpected

هل يمكن لأحدهم أن يرينا كيفية الهروب من الأقواس بشكل صحيح حتى أتمكن من تنفيذ ما ورد أعلاه

0

1 إجابة

The reason is because, you are not using the bash shell. Your makefile does not use the bourne again shell (bash) in which process substitution is supported(<()), so the system executes it with /bin/sh. The default /bin/sh bourne shell is designed to run only with standard features.

استخدم SHELL: =/bin/bash في Makefile لجعل shell bash بشكل افتراضي لجميع الوصفات ، أو يمكنك تعريفه لكل وصفة.

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

من جنو إنشاء الوثائق: اختيار شل . نقلا عنها لإظهار الخطوط الفعلية

يتم استخدام البرنامج المستخدم أثناء نقل shell من المتغير SHELL . إذا لم يتم تعيين هذا المتغير في makefile ، فسيتم استخدام البرنامج /bin/sh كدليل

0
وأضاف
لم أكن على علم بأن عملية استبدال يحدث بالفعل في makefile. افترضت أنه يحدث داخل سياق docker تشغيل ، في حاوية تشغيل باش.
وأضاف المؤلف Bastian Venthur, مصدر
لن يعمل هذا تمامًا ، لأن واصف الملف الذي تم إرجاعه من خلال استبدال العملية لن يكون متاحًا داخل الحاوية. (لكن 1+ لأنها تحل المشكلة الفورية المذكورة في السؤال).
وأضاف المؤلف chepner, مصدر
ليكون واضحاً ، لا يحدث استبدال العملية في makefile. يستدعي makefile shell لتشغيل الوصفة. shell استدعاء هو /bin/sh (افتراضياً). بشكل أساسي ، إذا كان لديك وصفة <�وصفة ، فقم بتشغيل الأمر $ (SHELL) -c '' حيث $ (SHELL) بشكل افتراضي /bin/sh ، و /bin/sh لن يفهم عملية استبدال bash.
وأضاف المؤلف MadScientist, مصدر
BastianVenthur: يتم تشغيل make في shell الحالي ويستخدم متغير البيئة SHELL الذي يكون بشكل افتراضي لا bash
وأضاف المؤلف Inian, مصدر