১৯ আগস্ট ২০১৩-এ, র্যান্ডাল এল শোয়ার্জ এই শেল স্ক্রিপ্টটি পোস্ট করেছেন , এটি লিনাক্স-এ নিশ্চিত করার উদ্দেশ্যে করা হয়েছিল, "বর্ণের শর্ত ছাড়াই বা লক ফাইলগুলি পরিষ্কার না করে [স্ক্রিপ্টের কেবলমাত্র একটি উদাহরণ চলছে" ":
#!/bin/sh
# randal_l_schwartz_001.sh
(
if ! flock -n -x 0
then
echo "$$ cannot get flock"
exit 0
fi
echo "$$ start"
sleep 10 # for testing. put the real task here
echo "$$ end"
) < $0
এটি বিজ্ঞাপন হিসাবে কাজ করছে বলে মনে হচ্ছে:
$ ./randal_l_schwartz_001.sh & ./randal_l_schwartz_001.sh
[1] 11863
11863 start
11864 cannot get flock
$ 11863 end
[1]+ Done ./randal_l_schwartz_001.sh
$
আমি যা বুঝতে পারি তা এখানে:
- স্ক্রিপ্টটি
<
তার নিজস্ব সামগ্রীর একটি অনুলিপি (যেমন থেকে$0
) একটি সাবসেলের এসটিডিআইএন (অর্থাত্ ফাইল বর্ণনাকারী0
) -এ পুনঃনির্দেশ করে । - সাব-শেলের মধ্যে, স্ক্রিপ্টটি
flock -n -x
ফাইল বর্ণনাকারীতে একটি অ-ব্লকিং, এক্সক্লুসিভ লক ( ) পাওয়ার চেষ্টা করে0
।- যদি সেই প্রচেষ্টা ব্যর্থ হয়, সাবশেলটি প্রস্থান করে (এবং এটির জন্য আর কিছুই নেই বলে মূল স্ক্রিপ্টটি ঘটে)।
- পরিবর্তে যদি প্রচেষ্টা সফল হয় তবে সাব-শেলগুলি পছন্দসই কাজটি চালায়।
আমার প্রশ্নগুলি এখানে:
- স্ক্রিপ্টটি কেন অন্য কোনও ফাইলের বিষয়বস্তু বলার পরিবর্তে সাবসেলের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত কোনও ফাইল বর্ণনাকারীর কাছে পুনর্নির্দেশ করা দরকার ? (আমি একটি ভিন্ন ফাইল থেকে পুনর্নির্দেশের চেষ্টা করেছি এবং উপরের মতো পুনরায় চলার চেষ্টা করেছি এবং মৃত্যুদণ্ডের আদেশ পরিবর্তন হয়েছে: ব্যাকগ্রাউন্ডহীন টাস্কটি ব্যাকগ্রাউন্ডের আগে লকটি অর্জন করেছে So সুতরাং, সম্ভবত ফাইলটির নিজস্ব বিষয়বস্তু ব্যবহার করা জাতিগত পরিস্থিতি এড়িয়ে চলে; তবে কীভাবে?)
- স্ক্রিপ্টটি কেন, যে কোনও উপায়ে সাবशेলের উত্তরাধিকার সূত্রে প্রাপ্ত কোনও ফাইল বর্ণনাকারীর কাছে পুনর্নির্দেশ করা দরকার?
- কেন একটি
0
শেলের মধ্যে ফাইল বর্ণনাকারীর উপর একটি এক্সক্লুসিভ লক রাখা একই স্ক্রিপ্টের অনুলিপি, অন্য শেলের মধ্যে চলমান, ফাইল বিবরণীতে একচেটিয়া লক পাওয়া থেকে বাধা দেয়0
? শাঁস মান ফাইল বর্ণনাকারী (তাদের নিজস্ব আলাদা কাদি না0
,1
এবং2
, অর্থাত্ stdin, stdout- এ, এবং stderr)?