/bin/sh
bash
आपके सिस्टम पर हो सकता है, लेकिन जब इसे लागू किया जाता है sh
, bash
तो POSIX मोड में चल रहा होगा (जैसे कि POSIXLY_CORRECT
परिभाषित किया गया था, या इसके साथ शुरू किया गया था --posix
)।
इस मोड में, प्रक्रिया प्रतिस्थापन मौजूद नहीं हैं।
समाधान:
all:
command1 >file1
command2 >file2
diff file1 file2
rm -f file1 file2
वैकल्पिक:
all:
bash -c "diff <(command1) <(command2)"
या बस Makefile चर SHELL
को परिभाषित करें /bin/bash
:
SHELL=/bin/bash
यदि आप पोर्टेबिलिटी चाहते हैं, तो पहले समाधान के साथ जाएं। यदि आप पर निर्भरता के साथ ठीक हैं bash
, तो दूसरा चुनें। यदि आपको गैर-जीएनयू make
कार्यान्वयन के बारे में परवाह करने की आवश्यकता नहीं है , तो तीसरे का उपयोग करें।
सेटिंग के बारे में SHELL
: पोसिक्स मानक का कहना है कि मेकफाइल्स में निष्पादन योग्यताओं को system()
C लाइब्रेरी फ़ंक्शन द्वारा लागू किया जाना चाहिए make
। यह फ़ंक्शन SHELL
पर्यावरण चर का उपयोग करने की गारंटी नहीं है (वास्तव में, ऐसा करने से मानक द्वारा हतोत्साहित किया जाता है)। मानक यह कहने के लिए कुछ लंबाई में भी जाता है कि Makefile चर सेट करने SHELL
से पर्यावरण चर प्रभावित नहीं होना चाहिए SHELL
। make
हालांकि, मुझे पता है कि ज्यादातर कार्यान्वयन में , मेकफाइल वेरिएबल SHELL
का उपयोग कमांड्स को निष्पादित करने के लिए किया जाएगा।
उपयोगिता के लिए तर्कmake
में सुझाव का उपयोग करना है bash -c
:
MAKESHELL
अन्य make
कार्यान्वयनों द्वारा प्रदान की गई ऐतिहासिक विशेषता और संबंधित सुविधाओं को छोड़ दिया गया था। कुछ कार्यान्वयन में इसका उपयोग उपयोगकर्ता को make
कमांड चलाने के लिए उपयोग किए जाने वाले शेल को ओवरराइड करने के लिए किया जाता है । यह भ्रामक था; एक पोर्टेबल के लिए make
, शेल को मेफाइल लेखक द्वारा चुना जाना चाहिए। इसके अलावा, एक मेकफाइल लेखक को वैकल्पिक शेल का उपयोग करने की आवश्यकता नहीं होती है और फिर भी मेकफाइल पोर्टेबल पर विचार कर सकता है। हालांकि वैकल्पिक शेल को निर्दिष्ट करने के लिए एक तंत्र को मानकीकृत करना संभव होगा, मौजूदा कार्यान्वयन ऐसे तंत्र पर सहमत नहीं होते हैं, और मेकफाइल लेखक पहले से ही लक्ष्य के लिए नियम में शेल नाम निर्दिष्ट करके एक वैकल्पिक शेल आमंत्रित कर सकते हैं; उदाहरण के लिए:
python -c "foo"
bash
अस्थायी फ़ाइलों का उपयोग किए बिना अंतर समस्या के लिए मेकफाइल या किसी अन्य समाधान में आह्वान करने का कोई तरीका है ?