/bin/sh
bash
আপনার সিস্টেমে থাকতে পারে , তবে যখন আহ্বান করা হবে sh
, তখন bash
পসিক্স মোডে চলবে (যেমন POSIXLY_CORRECT
সংজ্ঞায়িত করা হয়েছিল, বা এটি দিয়ে শুরু হয়েছিল --posix
)।
এই মোডে, প্রক্রিয়া বিকল্প বিদ্যমান নেই।
সলিউশন:
all:
command1 >file1
command2 >file2
diff file1 file2
rm -f file1 file2
বিকল্প:
all:
bash -c "diff <(command1) <(command2)"
অথবা কেবল মেকফিল ভেরিয়েবলটিকে এই SHELL
হিসাবে সংজ্ঞায়িত করুন /bin/bash
:
SHELL=/bin/bash
আপনি যদি বহনযোগ্যতা চান তবে প্রথম সমাধানটি নিয়ে যান। আপনি যদি নির্ভরতার সাথে ঠিক থাকেন bash
তবে দ্বিতীয়টি বেছে নিন। আপনার অতিরিক্তভাবে যদি অ-জিএনইউ make
বাস্তবায়ন সম্পর্কে যত্ন নেওয়া প্রয়োজন না হয় তবে তৃতীয়টি ব্যবহার করুন।
সেটিং সম্পর্কে SHELL
: পসিএক্স স্ট্যান্ডার্ড বলছে যে মেকফাইলগুলিতে এক্সিকিউটেবলকে system()
সি লাইব্রেরির ক্রিয়াকলাপের মাধ্যমে ডাকা উচিত make
। এই ফাংশনটি SHELL
পরিবেশের পরিবর্তনশীল ব্যবহারের গ্যারান্টিযুক্ত নয় (প্রকৃতপক্ষে, এটি করা মান দ্বারা নিরুত্সাহিত করা হয়)। স্ট্যান্ডার্ডটি কিছু দৈর্ঘ্যেও বলে যায় যে মেকফিল ভেরিয়েবলটি সেট করা পরিবেশের পরিবর্তনশীলকেSHELL
প্রভাবিত করবে না । তবে আমি জানি যে এর বেশিরভাগ বাস্তবায়নে মেকফিল ভেরিয়েবল কমান্ডগুলি কার্যকর করতে ব্যবহৃত হবে। SHELL
make
SHELL
ইউটিলিটির জন্য রেশনলেmake
পরামর্শটি হ'ল bash -c
:
Implementতিহাসিক MAKESHELL
বৈশিষ্ট্য এবং অন্যান্য make
বাস্তবায়ন দ্বারা সরবরাহিত সম্পর্কিত বৈশিষ্ট্য বাদ দেওয়া হয়েছিল। কিছু প্রয়োগে এটি ব্যবহারকারীর শেলকে ওভাররাইড করতে make
কমান্ডগুলি চালনার জন্য ব্যবহার করতে দেওয়া হয় । এটি বিভ্রান্তিকর ছিল; পোর্টেবলের জন্য make
, শেলটি মেকফিল লেখক দ্বারা বেছে নেওয়া উচিত। তদ্ব্যতীত, একজন মেকফিল লেখককে বিকল্প শেল ব্যবহার করার প্রয়োজন নেই এবং এখনও মেকফিল পোর্টেবল বিবেচনা করতে পারেন। বিকল্প শেলটি নির্দিষ্ট করার জন্য কোনও প্রক্রিয়া মানক করা সম্ভব হলেও বিদ্যমান বাস্তবায়নগুলি এই জাতীয় ব্যবস্থার সাথে একমত হয় না এবং মেকফাইল লেখকরা ইতিমধ্যে একটি লক্ষ্যের জন্য নিয়মে শেলের নাম উল্লেখ করে একটি বিকল্প শেলটি আহ্বান করতে পারেন; উদাহরণ স্বরূপ:
python -c "foo"
bash
Makefile নামক বা অস্থায়ী ফাইল ব্যবহার না করেই পরিবর্তন সমস্যা অন্য কোন সমাধান?