linux - সটল - চিত্রভিত্তিক অপারেটিং সিস্টেম
লিনাক্সে ইপোকের পরে সেকেন্ডে বর্তমান সময় পান, বাশ (5)
আমার date
মত সহজ কিছু দরকার, কিন্তু বর্তমান তারিখ, ঘন্টা, মিনিট এবং সেকেন্ডের পরিবর্তে সেকেন্ডের মধ্যে সেকেন্ডে।
date
যে বিকল্প প্রস্তাব বলে মনে হচ্ছে না। একটি সহজ উপায় আছে কি?
বিশুদ্ধ bash সমাধান
EPOCHSECONDS
5.0 থেকে আপনি অন্তর্নির্মিত পরিবর্তনশীল EPOCHSECONDS
ব্যবহার করতে পারেন।
$ echo $EPOCHSECONDS
1547624774
EPOCHREALTIME
এছাড়াও সেকেন্ডের ভগ্নাংশ রয়েছে যা আছে।
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
দশমিক বিন্দু মুছে ফেলার মাধ্যমে মাইক্রো-সেকেন্ডে (μs) রূপান্তর করা যেতে পারে। bash
অন্তর্নির্মিত গাণিতিক (( expression ))
ব্যবহার করার সময় এটি আগ্রহের হতে পারে যা শুধুমাত্র পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে।
$ echo ${EPOCHREALTIME/./}
1547624774371215
উপরের উদাহরণ থেকে মুদ্রিত সময় মান ভাল পঠনযোগ্যতার জন্য সমান। প্রকৃতপক্ষে সময় মান ভিন্ন হতে পারে কারণ প্রতিটি কমান্ড কার্যকর করার জন্য অল্প সময় লাগে।
এ পর্যন্ত, সমস্ত উত্তর বহিরাগত প্রোগ্রাম date
ব্যবহার করুন।
ব্যাশ 4.2 এর থেকে, printf
এর একটি নতুন সংশোধনকারী %(dateformat)T
যেটি যখন যুক্তি -1
দিয়ে ব্যবহৃত হয় তখন তারিখটি দ্বারা প্রদত্ত বিন্যাসের বর্তমান তারিখটি dateformat
strftime(3)
দ্বারা পরিচালিত হয় strftime(3)
ফর্ম্যাটের বিষয়ে তথ্য জানার জন্য)।
সুতরাং, একটি বিশুদ্ধ বাশ সমাধান জন্য:
printf '%(%s)T\n' -1
অথবা যদি আপনি একটি পরিবর্তনশীল var
মধ্যে ফলাফল সংরক্ষণ করতে হবে:
printf -v var '%(%s)T' -1
কোন বহিরাগত প্রোগ্রাম এবং কোন subshells!
ব্যাশ 4.3 এর থেকেও, এটি উল্লেখ করা সম্ভব নয় -1
:
printf -v var '%(%s)T'
(তবে এটি সর্বদা যুক্তি -1
প্রদান করা বিজ্ঞতার হতে পারে)।
যদি -1
পরিবর্তে আপনি -2
হিসাবে যুক্তি ব্যবহার করেন তবে বাশটি বর্তমান তারিখের পরিবর্তে শেলটি শুরু করার সময় ব্যবহার করবে (তবে কেন আপনি এটি চান?)।
এই ব্যাশ স্ক্রিপ্টটি ব্যবহার করুন (আমার ~/bin/epoch
):
#!/bin/bash
# get seconds since epoch
test "x$1" == x && date +%s && exit 0
# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "[email protected]"
এটি @ এক্সেলাসাইড কী করেছে তার একটি এক্সটেনশান, কিন্তু Macs এর জন্য:
কোন নির্দিষ্ট তারিখের জন্য যুগ (1 জানুয়ারী 1970) থেকে সেকেন্ডের সংখ্যা নির্ধারণ করতে (যেমন 21 অক্টোবর 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
দয়া করে মনে রাখবেন যে, সম্পূর্ণতার জন্য, আমি বিন্যাসে সময় অংশ যোগ করেছি। কারণটি হচ্ছে যে date
আপনি যে তারিখের অংশটি দিয়েছেন তা গ্রহণ করবে এবং প্রদান করা মানটিতে বর্তমান সময় যুক্ত করবে। উদাহরণস্বরূপ, যদি আপনি '00: 00: 00' অংশ ব্যতীত 4:19 PM তে উপরের কমান্ডটি চালান, তবে এটি স্বয়ংক্রিয়ভাবে সময় যোগ করবে। যেমন "অক্টোবর 21 1973" "অক্টোবর 21 1973 16:19:00" হিসাবে পার্স করা হবে। যে আপনি চান কি হতে পারে না।
আপনার টাইমস্ট্যাম্পটি একটি তারিখে রূপান্তর করতে:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
তারিখ প্রয়োগের জন্য অ্যাপল এর ম্যান পৃষ্ঠা: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
সবচেয়ে Awk বাস্তবায়ন সঙ্গে:
awk 'BEGIN {srand(); print srand()}'