कमांड प्रॉम्प्ट से पहले टर्मिनल में चलने वाली घड़ी कैसे दिखाएं


40

मैं टर्मिनल का उपयोग करना पसंद करता हूं और इसका उपयोग करने में ज्यादातर समय बिताता हूं। मैं टर्मिनल में समय देखने का एक तरीका खोज रहा हूं जबकि मैं इसे समानांतर उपयोग करता हूं। जब यह गुजरता है तो समय अपने आप बदल जाएगा। अगर यह मेरे कमांड प्रॉम्प्ट पर छोड़ दिया जाए तो यह बहुत बढ़िया होगा।

अगर यह टर्मिनल में मेरा कमांड प्रॉम्प्ट है:

saurav@saurav-P4I45Gx-PE:~$

फिर मैं घड़ी (समय) को इस प्रकार देखना चाहूंगा:

saurav@saurav-P4I45Gx-PE[06:27:01]:~$

या

saurav@(06:27:01):~$

या कोई अन्य प्रारूप। 06:27:01समय कहाँ है मैं जो चाहता हूं, वह समय दिखाने के लिए है जो सेकंड बीतने पर बदलता है।

तो क्या इसे हासिल करने का कोई तरीका है?


आप समय निर्धारित करने के लिए $PS1(शीघ्र) चर सेट करने में सक्षम हो सकते हैं , लेकिन यदि परिवर्तन हो तो मुझे यकीन नहीं है।
किरी

आप निर्दिष्ट कर सकते हैं \@, लेकिन समय केवल प्रत्येक बार शीघ्र प्रदर्शित करता है, वर्तमान समय नहीं है।
किरी

2
@ मरमू, जैसा कि मैंने अपने प्रश्न में निर्दिष्ट किया है, कि उत्तर केवल बाश के लिए काम नहीं है।
Rosh_Th

2
लेकिन सवाल खुद zsh के बारे में नहीं है (यह सामान्य है), इसलिए मैंने G_P को वहां उत्तर पोस्ट करने की सलाह दी। G_P के उत्तर के साथ अब वहां जोड़ा गया, यह एक डुबकी के रूप में योग्य है।
मुरु

1
@ मरमू अन्य प्रश्न विशेष रूप से संकेत में समय चाहता है। यहाँ ओपी चाहता है कि यह टर्मिनल में मुद्रित हो और यह निर्दिष्ट नहीं करता है कि इसे प्रॉम्प्ट में होना है।
terdon

जवाबों:


74

मुझे यकीन नहीं है कि डिफ़ॉल्ट बैश शेल का उपयोग करके इसे प्राप्त करना इतना आसान है (लेकिन मैं यह नहीं कह रहा हूं कि यह असंभव है)। आपको संभवतः एक कमांड / फ़ंक्शन की आवश्यकता होगी जो प्रॉम्प्ट पर आपके द्वारा लिखी गई किसी भी चीज़ में हस्तक्षेप किए बिना हर सेकंड कमांड प्रॉम्प्ट को ताज़ा करने में सक्षम है।

जेड खोल (zsh) एक अंतर्निहित में आदेश, कहा जाता zleहै, जो है, जब साथ प्रयोग किया reset-promptतर्क, बलों शीघ्र फिर से विस्तार हो रहा है, तो संपादन बफ़र redisplays।

यदि आप इसे आज़माना चाहते हैं, तो निम्न चरणों का उपयोग करें:

  1. इस कमांड के साथ Z शेल स्थापित करें:

    sudo apt-get install zsh
    
  2. जब आप zshपहली बार दौड़ते हैं , 0तो जब आपसे पूछा जाए तब चुनें ।

  3. ~/.zshrcफ़ाइल संपादित करें और निम्नलिखित पंक्तियाँ जोड़ें:

    setopt PROMPT_SUBST
    PROMPT='%B%F{red}%n@%m%f%F{yellow}[%D{%L:%M:%S}]%f:%F{blue}${${(%):-%~}}%f$ %b'
    TMOUT=1
    
    TRAPALRM() {
        zle reset-prompt
    }
    

    फ़ाइल को सहेजें और इसे बंद करें।

  4. अपने टर्मिनल में, जब आप अभी भी zsh का उपयोग कर रहे हैं, चलाएं source ~/.zshrc, या बस zsh, अपने प्रॉम्प्ट को रीसेट करने के लिए। अब आपके संकेत की तरह दिखना चाहिए:

    saurav@saurav-P4I45Gx-PE[1:25:21]:~$
    

    कुछ रंगों के साथ।

  5. यदि आप इसे पसंद करते हैं, तो chsh -s /bin/zshअपने वर्तमान शेल को बदलने के लिए चलाएं /bin/zsh(प्रभावी होने के लिए इस परिवर्तन के लिए पुन: लॉगिन आवश्यक है)।

  6. exitयदि आप zsh शेल से बाहर निकलना चाहते हैं तो चलाएं ।

यहाँ मेरे टर्मिनल से एक 15 सेकंड का पेंच है:

कमांड प्रॉम्प्ट से पहले टर्मिनल में घड़ी चलाना


4
पेंचकस के लिए बोनस अंक। कूल सामान वास्तव में।
मैडमाइक

@SauravKumar रन chshसे अपने डिफ़ॉल्ट खोल बदलने के लिए /bin/bashकरने के लिए /bin/zsh। आपको लॉग आउट करके फिर से लॉग इन करना होगा।
राडू रियडेनु

वास्तव में मैंने इसे बनाया है .. लेकिन हर बार टर्मिनल खुलने पर मुझे zshइस घड़ी मोड में प्रवेश करने के लिए कमांड निष्पादित करना पड़ता है ..
सौरव कुमार

@ RaduRădeanu: हाँ काम करने के बाद लॉगिन के साथ-साथ पुनः आरंभ करें .. यू आर ग्रेट .. जय हो !! : पी
सौरव कुमार

यह मेरे लिए काम नहीं करता है। एक सेकंड के बाद, यह टर्मिनल को बंद कर देता है। मैं लिनक्स मिंट में हूं, लेकिन मुझे नहीं लगा कि मैं अभी भी zsh का उपयोग करता हूं। कोई विचार?
isrrasci

28

यदि आप अपने टर्मिनल में रनिंग टाइम प्रदर्शित करना चाहते हैं तो आप इस कमांड का उपयोग कर सकते हैं। यह आपके टर्मिनल के ऊपरी दाहिने हिस्से में समय प्रदर्शित करेगा।

  while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-11));echo -e "\e[31m`date +%r`\e[39m";tput rc;done &

यहाँ छवि विवरण दर्ज करें

लेकिन ध्यान दें कि इस कमांड का उपयोग करके समय प्रदर्शित करना टर्मिनल में मौजूद टेक्स्ट को ओवरलैप कर सकता है। इसलिए इस कमांड का इस्तेमाल थोड़ी सावधानी से करें।

एक अन्य तरीका PS1 में नियंत्रण चरित्र का उपयोग कर सकता है

[guru@guru-pc ~]$  PS1='\[\u@\h \T \w]\$'

[guru@guru-pc 11:06:16 ~]$

लेकिन इस विधि में आपका समय केवल एंटर दबाने के बाद रिफ्रेश होगा।

यदि आप उपरोक्त विधि को स्थायी करना चाहते हैं तो अपनी ~.bashrcफाइल में उपरोक्त कमांड (जो आपको पसंद है या दोनों) जोड़ें ।


महान! कैसे घड़ी का रंग बदलने के लिए के रूप में कोई सुराग?
कलकत्ता नाइट

1
@CalculusKnight, आप कमांड में कलर कोड बदल सकते हैं। आप इसे कलर कोड के लिए संदर्भित कर सकते हैं। misc.flogisoft.com/bash/tip_colors_and_formatting
g_p

1
यह पूरी तरह से काम करता है - बहुत बहुत धन्यवाद। मैं इसे .bashrc से निष्क्रिय एसएसएच कनेक्शन को मारने से एक अति-सक्रिय फ़ायरवॉल को रोकने के लिए कह रहा हूं।
क्राइगी

11

यदि आप सभी को एक घड़ी दिखाना चाहते हैं, तो उपयोग करें date:

while :; do date +%r; sleep 1 ; done

जब तक आप इसे रोक नहीं देते, तब तक हर सेकंड में समय दिखाएगा CtrlC। यदि आप चाहते हैं कि यह एक ही लाइन पर हो (ऊपर हर सेकंड एक नई लाइन प्रिंट होगी), इसके बजाय यह करें:

while :; do printf '%s\r' "$(date +%r)"; sleep 1 ; done

2

यह सवाल मुझे कुछ दिनों से परेशान कर रहा है, और यहां मैंने अपने द्वारा सीखी गई सभी सामग्री के साथ अपनी संपादित पोस्ट दी है। विशेष रूप से, मेरा लक्ष्य BASH में संकेत देने के लिए बगल में घड़ी दिखाना था। अपने उत्तर में उल्लेख किए गए राडू रेडीनू की तरह, कुंजी एक फ़ंक्शन या चर खोजने के लिए है जो लगातार कमांड प्रॉम्प्ट को रिफ्रेश करने में सक्षम है या आपकी स्क्रीन के साथ या जो भी आप टाइप करते हैं, उसके बिना स्क्रीन को फिर से रिफ्रेश करने में सक्षम है। हालांकि, लूप के साथ इसे प्राप्त करना संभव है, जैसा कि G_P द्वारा दिखाया गया है, tput फ़ंक्शन के साथ स्क्रीन का निरंतर रिड्रेसिंग जो कुछ भी पाठ के साथ मेरी स्क्रीन पर है उसे तुरंत ताज़ा करता है। मैं प्राप्त करने के लिए काफी करीब आ गया हूँ, जो ओपी ने कोड G_P को कुछ हद तक संशोधित करके पूछा था, लेकिन फिर भी मेरा मानना ​​है कि राडु का जवाब ओपी चाहता है के सबसे करीब है। आगे की हलचल के बिना, यहाँ कुछ चीजें मैं '

# 1, मेरा पसंदीदा समाधान: टर्मिनल मल्टीप्लेक्स

टर्मिनल मल्टीप्लेक्स एक सॉफ्टवेयर है जो टर्मिनल स्क्रीन को दो या अधिक स्क्रीन में विभाजित करने की अनुमति देता है। विशेष रूप से, मैं बायोबू टर्मिनल पर ध्यान आकर्षित करना चाहता हूं। यह टर्मिनल एमुलेटर आधारित है, जो आपको समय, सीपीयू प्रतिशत, मेमोरी और अन्य संकेतकों के पूरे समूह को दिखाने की अनुमति देता है। मेरे बायोबू टर्मिनल के स्क्रीनशॉट में आप सीपीयू तापमान, बैटरी प्रतिशत, इंटरनेट कनेक्शन गुणवत्ता, सीपीयू आवृत्ति, रैम, तिथि और निश्चित समय देख सकते हैं। यदि आप टर्मिनल में रहते हुए इन चीजों की लगातार निगरानी से जुड़े हैं, तो बायोबू जाने का रास्ता है। वास्तव में, मुझे यह इतना पसंद आया है, मैंने इसे टैटी में लॉगिन करते समय स्वचालित रूप से लोड करने के लिए सेट किया है। केवल quirk यह है कि tty में आप वास्तव में अलग विंडो को मर्ज नहीं कर सकते हैं - केवल F3 और F4 कुंजी के साथ टैब के बीच स्विच करें।

मेरे बायोबू टर्मिनल का स्क्रीनशॉट

मल्टीप्लेक्सिंग विंडो से युक्त एक वैकल्पिक समाधान का उपयोग होता है splitvt, जो स्क्रीन को दो भागों में विभाजित करता है। आप एक टर्मिनल घड़ी चला सकते हैं जैसे कि tty-clock, तारीख के साथ घड़ी कमांड का उपयोग करें, या आप एक स्क्रिप्ट के साथ खुद को कोड कर सकते हैं। उस पर और बाद में। स्क्रीनशॉट में आप शीर्ष पर सामान्य बैश प्रॉम्प्ट के साथ विभाजन के एक हिस्से को देख सकते हैं, और निचले हिस्से में आप एक स्क्रिप्ट को चालू देख सकते हैं, जो dateकमांड के साथ clearकमांड के आउटपुट को लगातार ताज़ा करता है ।

यहाँ छवि विवरण दर्ज करें

# 2, जबकि डू लूप और टुटू यह संभवतः उस व्यक्ति के लिए निकटता है जिसने प्रश्न पूछा था जिसे बैश के साथ लागू किया गया था।

G_P ने while doऔर tputकमांड्स को मिलाकर एक शानदार समाधान पोस्ट किया है । हालाँकि G_P के कोड में दो चीजें थीं जो मुझे पसंद नहीं थीं। एक, घड़ी प्रॉम्प्ट के दाईं ओर थी, और दो - क्योंकि स्लीप साइकल 1 सेकंड है (मूल कोड जहां इसे स्लीप कहते हैं) का संदर्भ लें, स्क्रीन को हर सेकंड फिर से तैयार किया जाता है, और इससे मेरा आउटपुट गड़बड़ हो जाता है। मैंने जो किया, वह है कि अपने बैश प्रॉम्प्ट को \ n ऑपरेटर के साथ एक लाइन लोअर संपादित करें और G_P का कोड बदलें, ताकि tput ऑपरेटर घड़ी को प्रॉम्प्ट के ठीक ऊपर स्थित कर सके, और हर 60 सेकंड में रिफ्रेश कर सके; यह मुझे घंटों और मिनटों को देखने की अनुमति देता है (और मैं बिल्कुल मिनटों की परवाह नहीं करता हूं), जबकि घड़ी का लूप मेरी स्क्रीन को गड़बड़ नहीं करता है। सबसे पहले, यहाँ मेरा संकेत है:

PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$  ' 

और यहां G_P का संशोधित कोड है: enter code here

 while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &

छोटा संपादन : मैंने देखा है कि ऊपर दिया गया यह कोड कभी-कभी घड़ी को तुरंत ऊपर नहीं लाता है। यहां एक बेहतर संस्करण है: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done & यह एक जगह पहले स्क्रीन पर देखता है, फिर बैश को 60 सेकंड के नींद चक्र के माध्यम से जाने देता है

ध्यान दें, tput कप 0 0 स्क्रीन के ऊपरी दाएं कोने में, मेरे प्रॉम्प्ट के ठीक ऊपर घड़ी होती है और नींद 60 सेकंड के नींद चक्र को 60 सेकंड में बदल देती है, क्योंकि इस तरह से मैं हर सेकंड के बजाय केवल घंटे और मिनट की निगरानी कर सकता हूं। इस तरह, स्क्रीन पर मेरे पास जो भी टेक्स्ट है वह प्रभावित नहीं हुआ है, अधिकांश भाग के लिए (केवल जब मैं कमांड को उसी समय क्लॉक रिफ्रेश चलाने के लिए होता है)।

यहाँ छवि विवरण दर्ज करें

PS1 लाइन पहले से ही आपके .bashrc प्रोफ़ाइल में है, इसलिए आपको बस इसे थोड़ा ट्विक करने की आवश्यकता है। जबकि लूप को उसी फ़ाइल में कहीं जोड़ा जाना चाहिए, अधिमानतः अंत में # टिप्पणी के साथ कि यह आपके द्वारा शुरू में जोड़ा गया सामान है। और हमेशा किसी भी फाइल को वापस करने के लिए मत भूलना जैसे कि बस आप बुबू बनाते हैं और जिस तरह से यह था, उस पर वापस जाने की आवश्यकता है।

# 3, स्क्रिप्टिंग और अन्य

यह हिस्सा केवल उन लोगों के लिए है जो समय देखना चाहते हैं। जो लोग इसे लगातार मॉनिटर करना चाहते हैं, उनके लिए # 1 और # 2 पसंदीदा विकल्प हैं।

तो जैसा कि हम पहले ही देख चुके हैं जबकि लूप काफी उपयोगी है। यहां बताया गया है कि आप लूप, डेट और स्लीप कमांड के साथ घड़ी कैसे बना सकते हैं।

यहाँ छवि विवरण दर्ज करें

हिट रिटर्न / एंटर करें, और आप मूल रूप से हर सेकंड क्लीयर स्क्रीन पर दिखाए गए डेट कमांड का आउटपुट देखेंगे। यदि आप हर बार वह सब टाइप नहीं करना चाहते हैं, तो इस सारे सामान को स्क्रिप्ट में बदल दें:

#!/bin/bash

while true
do
clear;date
sleep 1
done

अब आप उस स्क्रिप्ट को दूसरे में काम करते हुए बैश के एक उदाहरण में स्प्लिट के साथ चला सकते हैं।

एक अन्य समाधान watch -n1 dateकमांड है, जो लगातार 1 सेकंड की अवधि के साथ तारीख कमांड को निष्पादित करेगा।

निष्कर्ष में: मैंने इस प्रश्न का उत्तर खोजने की कोशिश करते हुए कुछ चीजें सीखी हैं, और मुझे आशा है कि मेरे निष्कर्षों ने आपको किसी तरह से मदद की, और मुझे आशा है कि मैं इस प्रश्न पर योगदान करने में सक्षम था। बायोबू टर्मिनल IMHO सबसे अच्छा समाधान है, लेकिन खुद के लिए तय करें, कुछ शोध करें, और जो भी आपके लिए सबसे अच्छा काम करता है उसे चुनें।

शोध करते समय कुछ चीजें जो मुझे मिली हैं:

मेरी मूल पोस्ट, न्यूनतर समाधान: अपनी ~ / .bashrc फ़ाइल को संपादित करें। मैं इसे नैनो के साथ संपादित करना पसंद करता हूं, इसलिए

nano ~/.bashrc

यहां मेरी अपनी संपादित फ़ाइल का भाग है:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'    
else
   # PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
    PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi

दूसरे कथन के बाद पहली पंक्ति के साथ # टिप्पणी की गई है (यह मेरा पुराना संकेत है), अब दूसरी पंक्ति वह है जिसे आप चाहते हैं, और विशेष रूप से \tऑपरेटर। यह 24 घंटे के प्रारूप में चलने का समय दर्शाता है। अधिक जानकारी के लिए इसे देखें । एक छोटे से नोट के अलावा, मैं सामान का उपयोग कर रहा हूँ, क्योंकि मैं रंगीन संकेत का उपयोग नहीं कर रहा हूँ।

पुनश्च: कृपया मुझे बताएं कि क्या मुझे अपने उत्तर में कुछ भी जोड़ना चाहिए या इसे किसी भी तरह से संपादित करना चाहिए, लेकिन अधिकांश भाग के लिए मेरा मानना ​​है कि यह सबसे निर्णायक उत्तर है जिसके साथ मैं आ सकता हूं, और कम से कम मैं व्यक्तिगत रूप से कुछ भी नहीं जोड़ूंगा इसके लिए नया है।


1
जैसा कि ओपी चाहता है यह एक 'रनिंग' घड़ी प्रदर्शित नहीं करेगा। यह बस टर्मिनल प्रॉम्प्ट के लिए समय जोड़ देगा।
पार्टो

2
export PS1='\t$'

के बाद से मैं टर्मिनल मैं पर संभव के रूप में थोड़ा पृष्ठभूमि जानकारी के रूप में प्रदर्शित पसंद करते हैं आम तौर पर एक के रूप में हर सत्र को अनुकूलित #, $आदि (यदि आप इसे स्थायी रूप से बदलना चाहते हैं, minerz029 के समाधान एकदम सही है)

वर्तमान को दिखाने के लिए इसे संशोधित करने के लिए, मैं जा सकता था

export PS1='\T$'

12 घंटे के प्रारूप में समय के लिए। आप अन्य विकल्पों के लिए बैश प्रलेखन देख सकते हैं।


1

यह समय केवल तभी बदलेगा जब किसी नए प्रॉम्प्ट को निष्पादित किया जाएगा

आप निम्नलिखित को अपने में जोड़ सकते हैं .bashrc:

export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:[\t]:\w\$ "

जो उत्पादन करेगा:

USER@HOST:[12:59:59]:~$ _

अधिक जानकारी यहाँ: http://www.thegeekstuff.com/2008/09/bash-shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina-jolie/#8

उस उपरोक्त पृष्ठ में "PS1 चर के लिए उपलब्ध कोड का उपयोग करके" अपना स्वयं का संकेत बनाएं।


2
मैं आपके समय और प्रयास की सराहना करता हूं, लेकिन यह वह नहीं है जो मैं चाहता हूं ..
सौरव कुमार

@ सौरवकुमार हां, मैं समझता हूं कि आप एक दौड़ने वाली घड़ी चाहते हैं। मुझे यकीन नहीं है कि अगर 'पीएस 1' चर के साथ यह संभव है, $PROMPT_COMMANDतो काम करेगा यदि आप एक कमांड पा सकते हैं जो टिक टिक प्रदर्शित करता है।
किरी

वैसे मुझे लगता है कि आप यह कर सकते हैं .. :) ऐसा लगता है कि आप समाधान के करीब पहुंच गए हैं ..
सौरव कुमार

कारण है कि यह भी शामिल है यू \ दो बार? @ सौरवकुमार
डेविड

@ डेविड: मुझे क्षमा करें, मुझे नहीं पता। लेकिन @ minerz029 शायद आपके सवाल का जवाब देंगे। :)
सौरव कुमार

1

मैं वास्तव में ncmpcpp घड़ी की सुविधा को पसंद करता हूं , जिसे -key0 (स्क्रीनशॉट देखें) ट्रिगर करता है । स्थापना प्रक्रिया पर अधिक विस्तार के लिए, कृपया इस पोस्ट को देखें ।

यहाँ छवि विवरण दर्ज करें


1
watch -t -n1 "date +%T|figlet" एक आसान तरीका होगा।
g_p

1

G_p और Serg से प्रभावित होकर मैंने bash में फंक्शन बनाने की कोशिश की। यह काम करता है, लेकिन मुझे यकीन नहीं है कि हर सेकंड पीएस कमांड की जांच करना एक अच्छा विचार है, यह देखने के लिए कि क्या bash एक fg प्रक्रिया है या नहीं

prompttime() {
  PSCOLGREEN="\[$(tput setaf 2)\]"
  PSCOLRESET="\[$(tput sgr0)\]"
  PS1="${PSCOLGREEN}\\$ ${PSCOLRESET}[--:--:-- \W] "
  [ "$PROMPTCURRTTY" ] || {
    PROMPTCURRTTYtemp=$(tty)
    PROMPTCURRTTY=${PROMPTCURRTTYtemp//\/dev\//}
    unset PROMPTCURRTTYtemp; }
  PROMPTSTATE="[S]s+"
  while :; do
    sleep 1
    [ "$(ps a | grep "${PROMPTCURRTTY}.*${PROMPTSTATE}.*$(basename $SHELL)")" ] &&
    { tput sc
      tput hpa 3
      echo -en "$(date +%T)"
      tput rc; }
    continue
  done&
}

0

यदि आपको कभी भी उपयोग करने की आवश्यकता नहीं है, debian_chrootतो कमांड प्रॉम्प्ट का उपयोग करके समय प्रदर्शित करने के लिए यह एक आसान स्थान है:

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

अपने टर्मिनल में इसे टाइप करें और समय के साथ अपने कमांड प्रॉम्प्ट में बदलाव देखें:

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

टाइम सेट होने के बाद, एक रनिंग क्लॉक पाने के लिए जो हर दूसरे उपयोग को अपडेट करता है:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

यह .gifकार्रवाई में आदेश दिखाता है:

समय टर्मिनल प्रॉम्प्ट.गिफ़

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.