১৯ আগস্ট ২০১৩-এ, র্যান্ডাল এল শোয়ার্জ এই শেল স্ক্রিপ্টটি পোস্ট করেছেন , এটি লিনাক্স-এ নিশ্চিত করার উদ্দেশ্যে করা হয়েছিল, "বর্ণের শর্ত ছাড়াই বা লক ফাইলগুলি পরিষ্কার না করে [স্ক্রিপ্টের কেবলমাত্র একটি উদাহরণ চলছে" ":
#!/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)?