ما هو أفضل وسيلة لتنفيذ الطابع الزمني مقارنة في باش

StackOverflow https://stackoverflow.com/questions/205666

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي النصي في حالة تأهب أنني أحاول أن تبقي من البريد الالكتروني غير المرغوب لي ذلك أود أن وضع شرط أنه إذا تم إرسال تنبيه داخل، ويقول آخر ساعة، لعدم إرسال تنبيه آخر. الآن لدي وظيفة كرون أن يتحقق شرط كل دقيقة لأنني بحاجة ليتم تنبيهك بسرعة عندما يتم استيفاء الشرط ولكن لا حاجة لي للحصول على بريدك كل munite حتى أحصل على هذه القضية تحت السيطرة. ما هو أفضل وسيلة لمقارنة الوقت في باش لتحقيق ذلك؟

هل كانت مفيدة؟

المحلول

وحتى الآن الأسهل هو لتخزين الطوابع الزمنية من المرات تعديل ملفات وهمية. يمكن GNU touch وdate الأوامر مجموعة / الحصول على هذه الأوقات وإجراء عمليات حسابية التاريخ. باش لديها اختبارات للتحقق ما إذا كان ملف أحدث من (-nt) أو أكثر من (-ot) آخر.

وعلى سبيل المثال، لإرسال فقط إشعار إذا كان الإخطار الأخير قبل أكثر من ساعة من:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi

نصائح أخرى

استخدم "اختبار":

if test file1 -nt file2; then
   # file1 is newer than file2
fi

وتحرير: إذا كنت تريد أن تعرف عند وقوع حدث ما، يمكنك استخدام "لمسة" لإنشاء ملف الذي يمكنك مقارنة في وقت لاحق باستخدام "اختبار"

استخدم الأمر التاريخ لتحويل مرتين في شكل موحد، وطرح لهم. عليك ربما تريد تخزين وقت التنفيذ السابق في dotfile ثم تفعل شيئا مثل:

last = cat /tmp/.lastrun
curr = date '+%s'

diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
    # ...
fi

echo "$curr" >/tmp/.lastrun

و(شكرا، ستيف).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top