এই জাতীয় রেসিপি সম্পর্কে সাবধান
target:
MY_ID=$(GENERATE_ID);
echo $MY_ID;
এটি দুটি জিনিস ভুল করে। রেসিপিটির প্রথম লাইনটি দ্বিতীয় লাইন থেকে পৃথক শেল ইভেন্টে কার্যকর করা হয়। এর মধ্যে ভেরিয়েবলটি হারিয়ে যায়। দ্বিতীয় জিনিসটি ভুলটি হল যে $
পালানো হয়নি।
target:
MY_ID=$(GENERATE_ID); \
echo $$MY_ID;
উভয় সমস্যা স্থির করা হয়েছে এবং পরিবর্তনশীল ব্যবহারযোগ্য। ব্যাকস্ল্যাশ দুটি লাইন একত্রিত করে একটি একক শেল চালায়, সুতরাং ভেরিয়েবলের সেটিং এবং ভেরিয়েবল আফটারওয়ার্ড পড়ার কাজ করে।
আমি বুঝতে পারি যে আসল পোস্টটি কীভাবে শেল কমান্ডের ফলাফলকে একটি মেক ভেরিয়েবলের মধ্যে পাবেন এবং এই উত্তরটি কীভাবে এটি শেল ভেরিয়েবলে পাবেন তা দেখায় realize তবে অন্যান্য পাঠকরা উপকৃত হতে পারেন।
একটি চূড়ান্ত উন্নতি, যদি গ্রাহক কোনও "পরিবেশের পরিবর্তনশীল" সেট করার প্রত্যাশা করেন, তবে আপনাকে এটি রফতানি করতে হবে।
my_shell_script
echo $MY_ID
Makefile এ প্রয়োজন হবে
target:
export MY_ID=$(GENERATE_ID); \
./my_shell_script;
আশা করি যে কাউকে সাহায্য করবে। সাধারণভাবে রেসিপিগুলির বাইরে কোনও আসল কাজ করা এড়ানো উচিত, কারণ কেউ যদি '--dry-run' বিকল্পের সাহায্যে মেকফিল ব্যবহার করে তবে এটি কী করবে তা কেবল দেখার জন্য এটির কোনও অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া হবে না। প্রতিটি $(shell)
কল সংকলন সময়ে মূল্যায়ন করা হয় এবং কিছু বাস্তব কাজ ঘটনাক্রমে করা যেতে পারে। যখন সম্ভব হয় তখন আসল কাজটি, আইডি উত্পন্ন করার মতো, রেসিপিগুলির অভ্যন্তরে রেখে দেওয়া ভাল।