বাশ নির্দিষ্ট উত্তর
আমি কাঁটাচামচ কমাতে এবং বাশ অনেক কৌশল অবলম্বন করতে চাই বলে আমার উদ্দেশ্য রয়েছে:
todate=2013-07-18
cond=2013-07-15
এখন ভালো:
{ read todate; read cond ;} < <(date -f - +%s <<<"$todate"$'\n'"$cond")
এই উভয় ভেরিয়েবল পুনরায় পূরণ হবে $todate
এবং $cond
মাত্র কাঁটাচামচ ব্যবহার করে, এর ouptut সঙ্গে date -f -
কোনটা নিতে stdio লাইন দ্বারা এক তারিখ পড়ার জন্য।
অবশেষে, আপনি আপনার লুপটি ভেঙে ফেলতে পারেন
((todate>=cond))&&break
বা একটি ফাংশন হিসাবে :
myfunc() {
local todate cond
{ read todate
read cond
} < <(
date -f - +%s <<<"$1"$'\n'"$2"
)
((todate>=cond))&&return
printf "%(%a %d %b %Y)T older than %(%a %d %b %Y)T...\n" $todate $cond
}
ব্যবহার ব্যাশ 'র builtin printf
কোনটা সঙ্গে তারিখ সময় রেন্ডার করতে পারে যুগান্তকারী থেকে কয়েক সেকেন্ডের (দেখুন man bash
;-)
এই স্ক্রিপ্টটিতে কেবল একটি কাঁটাচামচ ব্যবহার করা হয়েছে।
সীমিত কাঁটাচামচ এবং তারিখ পাঠক ফাংশন সহ বিকল্প
এটি একটি উত্সর্গীকৃত উপপ্রসেস তৈরি করবে (কেবলমাত্র একটি কাঁটাচামচ):
mkfifo /tmp/fifo
exec 99> >(exec stdbuf -i 0 -o 0 date -f - +%s >/tmp/fifo 2>&1)
exec 98</tmp/fifo
rm /tmp/fifo
ইনপুট এবং আউটপুট খোলা থাকায়, ফিফো এন্ট্রি মুছতে পারে।
কাজ:
myDate() {
local var="${@:$#}"
shift
echo >&99 "${@:1:$#-1}"
read -t .01 -u 98 $var
}
নোটা যেমন অকেজো কাঁটাচামচ প্রতিরোধ করতে todate=$(myDate 2013-07-18)
, ভেরিয়েবলটি নিজেই ফাংশনটি দ্বারা সেট করা উচিত। এবং নিখরচায় সিনট্যাক্সের অনুমতি দেওয়ার জন্য (তারিখের স্ট্রিংয়ে কোট সহ বা ছাড়াই) চলক নামটি অবশ্যই শেষ যুক্তি হতে হবে ।
তারপরে তারিখের তুলনা:
myDate 2013-07-18 todate
myDate Mon Jul 15 2013 cond
(( todate >= cond )) && {
printf "To: %(%c)T > Cond: %(%c)T\n" $todate $cond
break
}
রেন্ডার করতে পারে:
To: Thu Jul 18 00:00:00 2013 > Cond: Mon Jul 15 00:00:00 2013
bash: break: only meaningful in a `for', `while', or `until' loop
যদি লুপের বাইরে থাকে
বা শেল সংযোজক ব্যাশ ফাংশন ব্যবহার করুন:
wget https://github.com/F-Hauri/Connector-bash/raw/master/shell_connector.bash
অথবা
wget https://f-hauri.ch/vrac/shell_connector.sh
(যা একেবারে একই নয়: .sh
যদি উত্সাহিত না হয় তবে সম্পূর্ণ পরীক্ষার স্ক্রিপ্ট থাকে)
source shell_connector.sh
newConnector /bin/date '-f - +%s' @0 0
myDate 2013-07-18 todate
myDate "Mon Jul 15 2013" cond
(( todate >= cond )) && {
printf "To: %(%c)T > Cond: %(%c)T\n" $todate $cond
break
}