बैश विशिष्ट जवाब
के रूप में मैं कांटे कम करने और मारना पसंद करते हैं, बहुत सारे ट्रिक की अनुमति देते हैं, मेरा उद्देश्य है:
todate=2013-07-18
cond=2013-07-15
तो अब:
{ read todate; read cond ;} < <(date -f - +%s <<<"$todate"$'\n'"$cond")
यह दोनों चर को फिर से पॉप्युलेट करेगा $todate
और $cond
केवल एक कांटे का उपयोग करके, 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
}
बैश के बिल्ड का उपयोग करके एपिच से सेकंड के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
}