বাশ স্ক্রিপ্ট একক লাইনে 5 মিনিটের প্রদর্শন গণনা করে [বন্ধ]


23

আমি একটি মিনিট পাঁচ মিনিটের নিচে রাখতে চাই, প্রতি সেকেন্ডে আপডেট করে এবং একই লাইনে ফলাফল দেখাব। বাশ স্ক্রিপ্টিং দিয়ে এটি কি সম্ভব?


গণনা কী করে? পুরো জিনিসটি সম্পর্কে আপনাকে আরও কিছু নির্দিষ্ট হতে হবে।
অ্যাড্রিয়ান ফ্রহ্বর্থম

এটা একেবারে সম্ভব। আপনি যদি আমাদের যদি বলেন (কোন আসল সিস্টেম / নেটওয়ার্ক প্রশাসনের সমস্যাটি আপনি সমাধান করার চেষ্টা করছেন) তবে আমরা আপনাকে বলতে পারি যে এটি উপলভ্য প্রচুর পদ্ধতির মধ্যে কোনটি সম্ভবত আপনার পক্ষে সবচেয়ে ভাল কাজ করবে। যদি এটি সাধারণ হয় "আমি bashস্ক্রিপ্টে এটি কীভাবে করব ?` প্রশ্নটি আপনার প্রশ্নটি সম্ভবত ইউনিক্স এবং লিনাক্সের পক্ষে ভাল উপযুক্ত - আমাকে জানান এবং আমি এটি আপনার জন্য সেখানে স্থানান্তর করতে পারি :)
ভোরেটাক 7

উত্তর:


42

এটি বাশ শেল থেকে কাজ করে:

secs=$((5 * 60))
while [ $secs -gt 0 ]; do
   echo -ne "$secs\033[0K\r"
   sleep 1
   : $((secs--))
done

বিশেষ অক্ষর 3 033 [ঠিক আছে রেখার শেষ প্রান্তকে উপস্থাপন করে যা পূর্ববর্তী আউটপুট থেকে কোনও অক্ষর বাকী থাকলে line r একটি ক্যারেজ রিটার্ন যা বাকী রেখাকে পরিষ্কার করে দেয় যা কার্সারটিকে লাইনের শুরুতে সরিয়ে দেয়। স্ট্যাকওভারফ্লো.কম এ এই বৈশিষ্ট্যটি সম্পর্কে একটি দুর্দান্ত থ্রেড রয়েছে ।

আপনি নিজের কমান্ড বা উইন্ড লুপের মধ্যে যা কিছু যোগ করতে পারেন। আপনার যদি আরও নির্দিষ্ট কিছু প্রয়োজন হয় তবে দয়া করে আমাকে আরও বিশদ সরবরাহ করুন।


আপনি কি 0K এর পরিবর্তে 3 033 [কে ascii-table.com/ansi-escape-sequens.php অনুসারে কে?
জোডি লি ব্রুচন

আমি \rপ্রথম দিকে লাইনটির শেষে কার্সারটি রেখেছিলাম (যা এটি প্রথম অক্ষরটি আড়াল করতে বাধা দেয়)। এখানে আপডেট সংস্করণটি রয়েছে: gist.github.com/boillodmanuel/676b3af823fae4177f1d0b41a6f23442 ধন্যবাদ
ব্যবহারকারী 1067920

13

সঠিক নেতৃস্থানীয় শূন্য এবং সহায়ক ঘন্টা সহ সঠিক আউটপুট ফর্ম্যাট (এইচএইচ: এমএম: এসএস) এর উন্নতি এখানে রয়েছে:

#!/bin/bash

m=${1}-1 # add minus 1 

Floor () {
  DIVIDEND=${1}
  DIVISOR=${2}
  RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} ))
  echo ${RESULT}
}

Timecount(){
        s=${1}
        HOUR=$( Floor ${s} 60/60 )
        s=$((${s}-(60*60*${HOUR})))
        MIN=$( Floor ${s} 60 )
        SEC=$((${s}-60*${MIN}))
     while [ $HOUR -ge 0 ]; do
        while [ $MIN -ge 0 ]; do
                while [ $SEC -ge 0 ]; do
                        printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC
                        SEC=$((SEC-1))
                        sleep 1
                done
                SEC=59
                MIN=$((MIN-1))
        done
        MIN=59
        HOUR=$((HOUR-1))
     done
}

Timecount $m

এরকম দেখতে একটি আউটপুট দেয়:

02:04:15

আউটপুট বেশ নয় HH:MM:SS। একক অঙ্কের মিনিট বা সেকেন্ডের জন্য আপনি দেখতে পেলেন 00:4:5
চিশকু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.