বাশ স্ক্রিপ্টে টাইমস্ট্যাম্প ভেরিয়েবল তৈরি করুন


375

লগিংটি একটু সহজ করার জন্য আমি শেল স্ক্রিপ্টে একটি টাইমস্ট্যাম্প ভেরিয়েবল তৈরি করার চেষ্টা করছি। আমি স্ক্রিপ্টের শুরুতে ভেরিয়েবলটি তৈরি করতে চাই এবং আমি যখনই ইস্যু করি তখন বর্তমান সময়ে এটি মুদ্রণ করতে চাইecho $timestamp । এটা আরও কঠিন প্রমাণিত তখন আমি ভেবেছিলাম। এখানে আমি চেষ্টা করেছি এমন কিছু জিনিস:

timestamp="(date +"%T")" প্রতিধ্বনি প্রিন্ট আউট (date +"%T")

timestamp="$(date +"%T")" ভেরিয়েবলটি আরম্ভ করার সময় প্রতিধ্বনি প্রিন্ট করে।

অন্যান্য জিনিস আমি চেষ্টা করেছি কেবলমাত্র সামান্য প্রকরণ যা আরও ভাল কাজ করে না। আমি কী করার চেষ্টা করছি তা কী কেউ কীভাবে সম্পন্ন করতে জানেন?

উত্তর:


309

অর্ডার বর্তমান টাইমস্ট্যাম্প এবং যখন একটি নির্দিষ্ট পরিবর্তনশীল সংজ্ঞায়িত করা হয় সময় না পাওয়ার জন্য, কৌতুক একটি ফাংশন এবং ব্যবহার করা হয় না একটি পরিবর্তনশীল:

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T"
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

আপনি যদি নির্দিষ্টকারীর দ্বারা প্রদত্ত ফর্ম্যাটটি পছন্দ না করেন তবে আপনি %Tগ্রহণ করেছেন এমন অন্য সময় রূপান্তর স্পেসিফায়ারগুলিকে একত্রিত করতে পারেন date। জিএনইউ-র জন্য dateআপনি এখানে অফিসিয়াল ডকুমেন্টেশনে এই নির্দিষ্টকরণগুলির সম্পূর্ণ তালিকা পেতে পারেন: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-version-specifiers


26
আপনি এই কীভাবে ব্যবহার করবেন তা মনস্থ করা উপর নির্ভর করে, আপনি এখনও কম্যান্ড প্রতিকল্পন ব্যবহার করতে হবে: echo "$(timestamp): something happened"
চিপনার

5
ফর্ম্যাটিংয়ের ক্ষেত্রে, এখানে প্রায়শই ঘন ঘন বিন্যাসগুলির একটি কাটা-শুকনো সেট রয়েছে: zxq9.com/archives/795
zxq9

175
আমার জন্য, আমি চেয়েছিলাম date +"%Y-%m-%d_%H-%M-%S"
কিম্বল রবিনসন

3
কোনও কারণে এটি আমাকে টাইমস্ট্যাম্প দেয়নি তবে বর্তমান সময়ের মধ্যে ":" এর সাথে রয়েছে।
এরিকবওয়ার্ক

7
আমি মনে করি প্রচুর লোক এই প্রশ্নটিতে একটি ইউনিক্স টাইমস্ট্যাম্প তৈরি করার উপায় খুঁজছেন (যেমনটি আমার কাছে রয়েছে) এবং চচারভের উত্তরটি আরও কার্যকর হতে পারে যদিও এই উত্তরটি প্রশ্নকারীর প্রশ্নের উত্তম উত্তর দেয়।
16:48

565

আপনি যদি ইউনিক্স টাইমস্ট্যাম্প পেতে চান তবে আপনাকে ব্যবহার করতে হবে:

timestamp=$(date +%s)

%Tআপনাকে ঠিক সময় দেবে; একই হিসাবে %H:%M:%S( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ এর মাধ্যমে )


5
তবে এই ভেরিয়েবলটি সেই সময়ের মানটি ধরে রাখবে যখন ভেরিয়েবলটি আরম্ভ করা হয়েছিল, আমি কি ঠিক আছি?
Lindhe

9
আমি অনুমান করি যে এটি প্রচুর পরিমাণে উত্সাহ পাচ্ছে কারণ এটি প্রশ্নের শিরোনামের জবাব দেয়, তবে এটি প্রশ্ন সংস্থার উত্তর দিচ্ছে না: ডি ওপি প্রতিবার একটি আলাদা টাইমস্ট্যাম্প পেতে চেয়েছিল, যেখানে এটি পুরো স্ক্রিপ্টের জন্য একটি সঞ্চয় করবে।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

1
আমি ঠিক এখানে খুঁজছিলাম। অর্থাত্ ইউনিক্স টাইমস্ট্যাম্প থেকে সঠিক বিন্যাসের স্ট্রিং date। যাইহোক, আমি "সঠিক" উত্তরটিও upvated করেছি। আমি এটি খুঁজছিলাম না, তবে এটি মূল প্রশ্নের উত্তম উত্তর এবং এটি আমার পক্ষে সত্যই কার্যকর।
ਵਿਸ਼ਾਲভাবে সুপিরিয়রম্যান

69
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too

1
ধন্যবাদ, এটাই আমি চেয়েছিলাম: আমার স্ক্রিপ্টে পুনরায় ব্যবহারের জন্য চলক হিসাবে একটি টাইমস্ট্যাম্প! শেল সিনট্যাক্সটি এত বিভ্রান্তিকর।
পাউথারথোর

2
মিলিসেকেন্ড অংশ যোগ করার জন্য +1। এটি echo $(date +"%Y-%m-%dT%T.%3N%z") তবে আমি এটি কোনও ম্যাক টার্মিনালে কাজ করতে পারি না। কিভাবে ম্যাক একই কাজ। ধন্যবাদ
kosgeinsky

43

ইউএসএক্স 2018-12-23T12:34:56টাইমস্ট্যাম্পের চেয়ে আইএসও 8601 ফর্ম্যাট ( ) বেশি পঠনযোগ্য। তবে কিছু ওএসে আপনার :ফাইলের নাম থাকতে পারে না । অতএব আমি পরিবর্তে এই জাতীয় কিছু ব্যবহার করার পরামর্শ দিচ্ছি:

2018-12-23_12-34-56

আপনি এই বিন্যাসে টাইমস্ট্যাম্প পেতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`

এই ফর্ম্যাটটি আমি অনেক অ্যাপ্লিকেশন ব্যবহার করতে দেখেছি। এ সম্পর্কে আরও একটি দুর্দান্ত বিষয় হ'ল যদি আপনার ফাইলের নামগুলি এর সাথে শুরু হয় তবে আপনি তাদের বর্ণমালা অনুসারে বাছাই করতে পারেন এবং সেগুলি তারিখ অনুসারে বাছাই করা হবে।


1
ধন্যবাদ এটি আমার সংস্করণ নিয়ন্ত্রণ স্ক্রিপ্টের জন্য দুর্দান্ত
অ্যান্ডি

1
TZ=UTC date +...ইউটিসি টাইমস্ট্যাম্প ব্যবহার করে এটি আরও বহনযোগ্য করে তুলতে পারে
মাইকেলচিরিকো

17

আমি উবুন্টু 14.04 ব্যবহার করছি।

আমার সিস্টেমে সঠিক উপায় হওয়া উচিত date +%s

আউটপুট date +%Tমত হয় 12:25:25


15

কমান্ড প্রতিস্থাপন ব্যবহার করুন:

timestamp=$( date +%T )

3
এটি আমি ইতিমধ্যে চেষ্টা করেছি এবং ভেরিয়েবলটি আরম্ভ করার সময় এটি কেবল তখনই মুদ্রণ করে।
ড্যান

10
@ dan08: এভাবে চলক কাজ করে how আপনি গতিশীল আউটপুট চাইলে একটি ফাংশন ব্যবহার করুন।
চোরোবা

11

তুমি ব্যবহার করতে পার

timestamp=`date --rfc-3339=seconds`

এটি বিন্যাসে বিতরণ করে 2014-02-01 15:12:35-05:00

ব্যাক-টিক ( `) অক্ষরগুলি তাদের মধ্যে যা আছে তা মূল্যায়ন করার কারণ এবং ফলাফলটি লাইনে অন্তর্ভুক্ত করবে। date --helpঅন্যান্য বিকল্প আছে।


1
এটি কখন কী সময় পায়, পর্দার আউটপুট অন্তর্ভুক্ত করার আগে বা আউটপুটের সময় তালিকাভুক্ত করার জন্য একটি লগ ফাইলের সাথে সাথেই এটি কার্যকর করা উচিত।
বিল

2
এটি একটি টাইমস্ট্যাম্পের জন্য আদর্শ বিন্যাসের চেয়ে কম কারণ আউটপুটে জায়গা রয়েছে। এটি "it টাইমস্ট্যাম্প" ব্যবহারের ক্ষেত্রে নিশ্চিত করুন বা আপনি কমান্ডটিতে দুটি প্যারাম পাবেন। যেমন touch $timestampদুটি ফাইল উত্পাদন করবে।
হার্ডসওয়্যার 16

8

সাম্প্রতিক সংস্করণগুলিতে bashবাহ্যিক প্রোগ্রামে কল করার প্রয়োজন নেই date:

printf -v timestamp '%(%T)T'

%(...)Tসম্পর্কিত আর্গুমেন্টটিকে ইউনিক্স টাইমস্ট্যাম্প হিসাবে ব্যবহার করে strftimeএবং বন্ধনীগুলির মধ্যে স্টাইল বিন্যাস অনুসারে এটি ফর্ম্যাট করে । একটি যুক্তি -1বর্তমান সময়ের সাথে মিলে যায় এবং যখন কোনও অস্পষ্টতা ঘটে না তখন তা বাদ দেওয়া যায়।


5

এবং আমার সহকর্মী ইউরোপীয়দের জন্য, এটি ব্যবহার করে দেখুন:

timestamp=$(date +%d-%m-%Y_%H-%M-%S)

ফর্ম্যাটটির একটি ফর্ম্যাট দেবে: "15-02-2020_19-21-58"

আপনি ভেরিয়েবল কল করুন এবং স্ট্রিং প্রতিনিধিত্ব পেতে

$timestamp

1
আপনার কোডের জন্য কোড স্বরলিপি ব্যবহার বিবেচনা করুন।
সাও

4
timestamp=$(awk 'BEGIN {srand(); print srand()}')

মান ব্যতীত শ্রান্ড বেশিরভাগ অ্যাওক বাস্তবায়নের সাথে বর্তমান টাইমস্ট্যাম্প ব্যবহার করে।


আমি এই খুব পছন্দ, খুব সৃজনশীল!
টবিভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.