POSIX কমান্ড / প্রক্রিয়া বিকল্প
_log()( x=0
while [ -e "${TMPDIR:=/tmp}/$$.$((x+=1))" ]
do continue; done &&
mkfifo -- "$TMPDIR/$$.$x" &&
printf %s\\n "$TMPDIR/$$.$x" || exit
exec >&- >/dev/null
{ rm -- "$TMPDIR/$$.$x"
logger --priority user."$1" --tag "${0##*/}"
} <"$TMPDIR/$$.$x" &
) <&- </dev/null
আপনার এটির মতো ব্যবহার করতে সক্ষম হওয়া উচিত:
exec >"$(_log notice)" 2>"$(_log error)"
mktemp
কমান্ডটি ব্যবহার করে এমন একটি সংস্করণ এখানে দেওয়া হয়েছে :
_log()( p=
mkfifo "${p:=$(mktemp -u)}" &&
printf %s "$p" &&
exec <&- >&- <>/dev/null >&0 &&
{ rm "$p"
logger --priority user."$1" --tag "${0##*/}"
} <"$p" &
)
... যা এটির mktemp
জন্য আপনার ফাইল ফাইল নির্বাচন করার অনুমতি দেয় সেগুলি ব্যতীত একই কাজ করে। এটি কাজ করে কারণ প্রক্রিয়া প্রতিস্থাপন কোনওভাবেই যাদুকরী নয় এবং প্রতিস্থাপনের আদেশের ক্ষেত্রে খুব অনুরূপভাবে কাজ করে । কমান্ড সাবস্টিটিউশন যেমন কমান্ডের সাথে চালিত কমান্ডের মান দিয়ে প্রসারণের পরিবর্তে পরিবর্তিত হয়, প্রক্রিয়া প্রতিস্থাপন এটির পরিবর্তে একটি ফাইল সিস্টেম লিঙ্কের নাম দেয় যেখানে আউটপুট পাওয়া যায়।
যদিও পসিক্স শেল এই জাতীয় কোনও সরাসরি করোলারি সরবরাহ করে না, তবে এটি অনুকরণকারী খুব সহজভাবে সম্পন্ন হয়। আপনাকে যা করতে হবে তা হ'ল একটি ফাইল তৈরি করা, একটি নাম কমান্ড প্রতিস্থাপনের বাইরে তার নামটি প্রিন্ট করা এবং একই কমান্ডের পটভূমিতে যা আপনার ফাইলটি আউটপুট দেয়। প্রক্রিয়া প্রতিস্থাপনের সাথে আপনি যেমন করেন ঠিক তেমন আপনি এখন সেই প্রসারণের মানটিতে পুনর্নির্দেশ করতে পারেন । এবং সুতরাং পসিক্স শেলটি আপনাকে অবশ্যই প্রয়োজনীয় সমস্ত সরঞ্জাম সরবরাহ করে - যা প্রয়োজন তা হ'ল আপনি সেগুলি এমনভাবে ব্যবহার করতে পারেন যা আপনার পক্ষে উপযুক্ত।
উপরোক্ত উভয় সংস্করণই নিশ্চিত করে যে তারা যে পাইপগুলি তৈরি করে / ব্যবহার করে সেগুলি ব্যবহার করার আগে তাদের যে ফাইলগুলি ব্যবহার করে সেগুলি ফাইল সিস্টেমের লিঙ্কটি নষ্ট করে দেয়। এর অর্থ এই সত্যটির পরে কোনও পরিষ্কার-পরিচ্ছন্নতার প্রয়োজন নেই, এবং আরও গুরুত্বপূর্ণ, তাদের স্ট্রিমগুলি কেবলমাত্র সেই প্রক্রিয়াগুলির জন্য উপলব্ধ যা প্রাথমিকভাবে এগুলি খোলায় - এবং তাই তাদের লগিং ক্রিয়াকলাপ স্নুপ / হাইজ্যাক করার জন্য তাদের ফাইল সিস্টেমের লিঙ্কগুলি ব্যবহার করা যাবে না। ফাইল সিস্টেমে তাদের fs- লিঙ্কগুলি রেখে যাওয়া একটি সম্ভাব্য সুরক্ষা গর্ত।
আর একটি উপায় এটি মোড়ানো হয়। এটি স্ক্রিপ্টের মধ্যে থেকে করা যেতে পারে।
x=${x##*[!0-9]*}
_log(){
logger --priority user."$1" --tag "${0##*/}"
} 2>/dev/null >&2
cd ../"$PPID.$x" 2>/dev/null &&
trap 'rm -rf -- "${TMPDIR:-/tmp}/$PPID.$x"' 0 ||
{ until cd -- "${TMPDIR:=/tmp}/$$.$x"
do mkdir -- "$TMPDIR/$$.$((x+=1))"
done &&
x=$x "$0" "$@" | _log notice
exit
} 2>&1 | _log error
এটি মূলত আপনার স্ক্রিপ্টটিকে কল করার অনুমতি দেয় যদি এটি এখনও না পেয়ে থাকে এবং আপনাকে বুট করার জন্য অস্থায়ীভাবে একটি ডিরেক্টরি ডিরেক্টরি পেতে পারে।