.ONESHLL এর চেতনায়, চূড়ান্ত পরিবেশের পক্ষে খুব কাছাকাছি যাওয়া সম্ভব ON
define _oneshell_newline_
endef
define oneshell
@eval "$$(printf '%s\n' '$(strip \
$(subst $(_oneshell_newline_),\n, \
$(subst \,\/, \
$(subst /,//, \
$(subst ','"'"',$(1))))))' | \
sed -e 's,\\n,\n,g' -e 's,\\/,\\,g' -e 's,//,/,g')"
endef
ব্যবহারের উদাহরণটি এরকম কিছু হবে:
define TEST
printf '>\n%s\n' "Hello
World\n/$$$$/"
endef
all:
$(call oneshell,$(TEST))
এটি আউটপুট দেখায় (পিড 27801 ধরে):
>
Hello
World\n/27801/
এই পদ্ধতির কিছু অতিরিক্ত কার্যকারিতা জন্য অনুমতি দেয়:
define oneshell
@eval "set -eux ; $$(printf '%s\n' '$(strip \
$(subst $(_oneshell_newline_),\n, \
$(subst \,\/, \
$(subst /,//, \
$(subst ','"'"',$(1))))))' | \
sed -e 's,\\n,\n,g' -e 's,\\/,\\,g' -e 's,//,/,g')"
endef
এই শেল বিকল্পগুলি:
- প্রতিটি কমান্ড কার্যকর হওয়ার সাথে সাথে মুদ্রণ করুন
- প্রথম ব্যর্থ কমান্ড থেকে প্রস্থান করুন
- একটি ত্রুটি হিসাবে অপরিজ্ঞাত শেল ভেরিয়েবলের ব্যবহার বিবেচনা করুন
অন্যান্য আকর্ষণীয় সম্ভাবনা সম্ভবত তাদের পরামর্শ দেবে।
export ANNOUNCE_BODY
কেবলমাত্র ভেরিয়েবলের মধ্যে নিয়মগুলি সেট করে - এটি vari ANNOUNCE_BODY কে অন্যান্য ভেরিয়েবলগুলি সংজ্ঞায়িত করতে দেয় না।