কমান্ডের সময় আউটপুট সময় কেটে যাওয়ার জন্য কি ইউনিক্স কমান্ড রয়েছে?


0

timeকমান্ডটি কার্যকর করতে কতক্ষণ সময় লেগেছে তা খুঁজে পেতে আমি ব্যবহার করতে পছন্দ করি তবে অভ্যন্তরীণভাবে সাব-কমান্ডগুলি কার্যকর করে এমন কমান্ডগুলি পরিচালনা করার সময় (এবং আউটপুট সরবরাহ করে যা আপনাকে সেই সব সাব-কমান্ডগুলির প্রত্যেকটি চলমান শুরু করার সময় বলতে দেয়) এটি হওয়া সত্যিই দুর্দান্ত হবে একটি নির্দিষ্ট সাব-কমান্ডটি কত সেকেন্ড (বা মিলিসেকেন্ড) চলমান শুরু করার পরে তা বলতে সক্ষম।

আমি যখন সাব-কমান্ড বলি, সত্যই বাইরের থেকে পার্থক্য করার একমাত্র উপায় হ'ল স্ট্যান্ডার্ড আউট প্রিন্ট করা কিছু।

সত্যিই এটি মনে হচ্ছে এটির একটি বিকল্প হওয়া উচিত time


এমন কিছু কমান্ড রয়েছে যা কিছু মুদ্রণ করে না। এছাড়াও, একটি কমান্ড যে বিদ্যমান পারে কিছু আউটপুট, একটু অপেক্ষা করে ও আরো কিছু আউটপুট ( watch, tail -f)।
চোরোবা

1
timeকেবলমাত্র শেল স্ক্রিপ্ট নয়, কোনও এক্সিকিউটেবল পরিমাপের জন্য একটি আদেশ। আউটপুট লাইনগুলি প্রতি সেটের কোনও অর্থ হয় না (যেমনটি ইতিমধ্যে চোরোবা লক্ষ করেছেন)। সুতরাং timeকখনও যেমন একটি বিকল্প হবে না। এটি অকেজো হবে। এটি একটি খুব নির্দিষ্ট কেস যা আপনার জন্য এবং সেই নির্দিষ্ট স্ক্রিপ্টটির জন্য অর্থবোধ করে।
drk.com.ar

উত্তর:


3

নির্দিষ্ট সাব-কমান্ডটি কত সেকেন্ড (বা মিলিসেকেন্ড) সুনির্দিষ্টভাবে চলতে শুরু করেছে তা জানাতে পেরে সত্যিই দুর্দান্ত লাগবে

একটি সম্ভাবনা এই bashপরিবর্তনশীলটি ব্যবহার করা :

সেকেন্ড

শেলটি শুরু হওয়ার পর থেকে এই পরিবর্তনশীলটি সেকেন্ডের সংখ্যাতে প্রসারিত হয়। এই ভেরিয়েবলের জন্য অ্যাসাইনমেন্টটি নির্ধারিত মানকে গণনাটিকে পুনরায় সেট করে এবং প্রসারিত মান নির্ধারিত কার্যের পরে নির্ধারিত সেকেন্ডের সংখ্যা হিসাবে নির্ধারিত মান হয়ে যায়।

আউটপুট স্ট্রিমের সাথে এটি একত্রিত করতে, এই উত্সর্গীকৃত স্ক্রিপ্টটি বিবেচনা করুন যা প্রতিটি ইনপুট লাইনে একটি টাইমস্ট্যাম্প যুক্ত করে:

$ cat timestamp-output
#!/bin/bash
while read line
do
  printf "%05d %s\n" $SECONDS "$line"
done

এবং আপনার স্ক্রিপ্টের আউটপুটটিকে সেই স্ক্রিপ্টে পাইপ করুন।

$ your-script | timestamp-output

উদাহরণ:

$ cat your-script
#!/bin/bash
for i in 1 2 3 4
do
  echo "step $i started";
  sleep $(($RANDOM%10));
done

$ your-script | timestamp-output

আউটপুট:

00000 পদক্ষেপ 1 শুরু হয়েছে
00002 পদক্ষেপ 2 শুরু হয়েছে
10,00010 ধাপ 3 শুরু
00015 ধাপ 4 শুরু হয়েছে


এটি কেবলমাত্র আউটপুট লাইনগুলিকে টাইমস্ট্যাম্পে পরিমার্জন করা যেতে পারে যা একটি সাব-কমান্ড শুরু হওয়ার ইঙ্গিত দেয়, ধরে নেওয়া হয় যে তারা গ্রেপড হতে পারে:

#!/bin/bash
regex="^start of command"
while read line
do
 if [[ "$line" =~ $regex ]]; then
   printf "%05d %s\n" $SECONDS "$line"
 else
   echo "$line"
 fi
done

নমুনা লিপি:

#!/bin/bash
for i in 1 2 3 4
do
  echo "start of command: $i";
  echo some output
  echo other output
  sleep $(($RANDOM%10));
done

নমুনা আউটপুট:

00000 কমান্ড শুরু: 1
কিছু আউটপুট
অন্যান্য আউটপুট
00002 কমান্ড শুরু: 2
কিছু আউটপুট
অন্যান্য আউটপুট
00006 কমান্ড শুরু: 3
কিছু আউটপুট
অন্যান্য আউটপুট
00008 কমান্ড শুরু: 4
কিছু আউটপুট
অন্যান্য আউটপুট

1

আপনার যদি শিশু প্রক্রিয়াগুলি কখন চলতে শুরু করে তা খুঁজে পাওয়ার দরকার হয় তবে আপনি strace -f -ttআউটপুটটি ব্যবহার এবং বিশ্লেষণ করতে পারেন , বা এটি করতে আপনার নিজের স্ক্রিপ্টটি সম্ভাব্যভাবে রোল করতে পারেন।

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