คำถามนี้รบกวนฉันสองสามวันแล้วและนี่คือโพสต์ที่แก้ไขของฉันพร้อมเนื้อหาทั้งหมดที่ฉันได้เรียนรู้ โดยเฉพาะเป้าหมายของฉันคือเพื่อให้บรรลุการแสดงนาฬิกาถัดจากพร้อมท์ใน BASH เช่นเดียวกับ Radu Radeanu ที่กล่าวถึงในคำตอบของเขากุญแจคือการหาฟังก์ชั่นหรือตัวแปรที่สามารถรีเฟรชพร้อมรับคำสั่งหรือวาดหน้าจอใหม่ได้อย่างต่อเนื่องโดยไม่รบกวนหน้าจอของคุณหรือสิ่งที่คุณพิมพ์ ในขณะที่สิ่งนี้เป็นไปได้ที่จะบรรลุด้วยขณะที่ลูปตามที่แสดงโดย G_P การวาดใหม่อย่างต่อเนื่องของหน้าจอที่มีฟังก์ชั่น tput ยุ่งกับข้อความใด ๆ ที่อยู่บนหน้าจอของฉันทันทีที่รีเฟรช ฉันเข้ามาใกล้เพื่อรับสิ่งที่ OP ถามโดยการแก้ไขโค้ด G_P ที่โพสต์ไว้บ้าง แต่ฉันก็ยังเชื่อว่าคำตอบของ Radu นั้นใกล้เคียงกับที่ OP ต้องการมากที่สุด หากไม่มีความกังวลใจต่อไปนี้คือสิ่งที่ฉันต้องการ
# 1 โซลูชันที่ฉันต้องการ: Terminal Multiplexer
Terminal multiplexer เป็นซอฟต์แวร์ที่อนุญาตให้แยกหน้าจอเทอร์มินัลออกเป็นสองหน้าจอหรือมากกว่า โดยเฉพาะอย่างยิ่งฉันต้องการดึงดูดความสนใจไปยังสถานี Byobu เครื่องมือจำลองเทอร์มินัลที่ใช้ ncurses นี้ช่วยให้คุณสามารถแสดงเวลาเปอร์เซ็นต์ CPU หน่วยความจำและตัวบ่งชี้อื่น ๆ ทั้งหมด ในหน้าจอจากเทอร์มินัล byobu ของฉันคุณสามารถดูอุณหภูมิของ cpu เปอร์เซ็นต์แบตเตอรี่คุณภาพการเชื่อมต่ออินเทอร์เน็ตความถี่ซีพียูแรมวันที่และเวลาแน่นอน หากคุณกังวลเกี่ยวกับการเฝ้าสังเกตสิ่งต่าง ๆ เหล่านี้เป็นประจำขณะที่อยู่ในอาคาร Byobu เป็นหนทางไป ที่จริงฉันชอบมากฉันตั้งให้โหลดโดยอัตโนมัติในขณะที่เข้าสู่ระบบ tty สิ่งที่แปลกประหลาดเพียงอย่างเดียวก็คือใน tty คุณไม่สามารถผสานหน้าต่างแยกกันได้ - เพียงสลับระหว่างแท็บกับปุ่ม F3 และ F4 เท่านั้น
โซลูชันทางเลือกที่เกี่ยวข้องกับการทำมัลติเพล็กซ์วินโดว์คือการใช้splitvt
ซึ่งแบ่งหน้าจอออกเป็นสองส่วน คุณสามารถรันนาฬิกาเทอร์มินัลเช่นtty-clock
ใช้คำสั่ง watch กับวันที่หรือคุณสามารถเขียนโค้ดด้วยตัวเองด้วยสคริปต์ เพิ่มเติมในภายหลัง ในสกรีนช็อตคุณจะเห็นส่วนหนึ่งของการแบ่งพร้อมกับ bash prompt ปกติที่ด้านบนและในส่วนล่างคุณสามารถเห็นสคริปต์ที่กำลังรันซึ่งจะรีเฟรชเอาต์พุตของdate
คำสั่งด้วยclear
คำสั่งอย่างต่อเนื่อง
# 2 ในขณะที่วนรอบและ tput
นี่อาจเป็นสิ่งที่ใกล้ชิดกับสิ่งที่คนที่ถามคำถามที่ต้องการนำมาใช้กับทุบตี
G_P ได้โพสต์โซลูชันที่ยอดเยี่ยมที่เกี่ยวข้องกับwhile do
และtput
คำสั่ง อย่างไรก็ตามในรหัสของ G_P มีสองสิ่งที่ฉันไม่ชอบ หนึ่งนาฬิกาอยู่ทางด้านขวาของพรอมต์และสอง - เพราะรอบการสลีปคือ 1 วินาที (อ้างถึงรหัสต้นฉบับที่มันบอกว่าสลีป) หน้าจอจะถูกวาดใหม่ทุกวินาทีและทำให้การแสดงผลของฉันยุ่ง สิ่งที่ฉันทำคือแก้ไข bash prompt ของฉันให้ต่ำกว่าหนึ่งบรรทัดด้วยตัวดำเนินการ \ 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 cup 0 0 วางนาฬิกาไว้ที่มุมขวาบนของหน้าจอด้านบนของพรอมต์และสลีป 60 เปลี่ยนรอบการสลีปเป็น 60 วินาทีเพราะวิธีที่ฉันสามารถตรวจสอบเพียงชั่วโมงและนาทีแทนทุกวินาที วิธีนี้สิ่งที่ฉันมีข้อความบนหน้าจอจะไม่ได้รับผลกระทบส่วนใหญ่ (เฉพาะเมื่อฉันเกิดขึ้นเพื่อเรียกใช้คำสั่งในเวลาเดียวกันการรีเฟรชนาฬิกา)
บรรทัด PS1 มีอยู่ในโปรไฟล์. bashrc ของคุณแล้วดังนั้นคุณเพียงแค่ปรับแต่งเล็กน้อย ควรเพิ่มห่วงการทำในขณะที่บางที่ในไฟล์เดียวกันโดยเฉพาะอย่างยิ่งในตอนท้ายด้วย # ความคิดเห็นว่านี่คือสิ่งที่คุณเพิ่มในตอนแรก และอย่าลืมสำรองไฟล์ใด ๆ เช่นนั้นเสมอในกรณีที่คุณสร้าง bubu และจำเป็นต้องกลับไปใช้วิธีเดิม
# 3 การเขียนสคริปต์และอื่น ๆ
ส่วนนี้เป็นเพียงสำหรับผู้ที่ต้องการดูเวลา สำหรับผู้ที่ต้องการตรวจสอบอย่างต่อเนื่อง # 1 และ # 2 เป็นตัวเลือกที่ต้องการ
ดังนั้นอย่างที่เราได้เห็นแล้วว่าห่วงลูปนั้นมีประโยชน์มาก นี่คือวิธีที่คุณสามารถสร้างนาฬิกาโดยใช้คำสั่งลูปวันที่และสลีป
กดปุ่ม return return / enter จากนั้นคุณจะเห็นผลลัพธ์ของคำสั่ง date ที่แสดงบนหน้าจอที่เคลียร์ทุกวินาที หากคุณไม่ต้องการพิมพ์ทุกอย่างทุกครั้งให้เปลี่ยนทุกสิ่งเป็นสคริปต์:
#!/bin/bash
while true
do
clear;date
sleep 1
done
ตอนนี้คุณสามารถรันสคริปต์นั้นด้วย splitvt ในอินสแตนซ์หนึ่งของ bash ขณะที่ทำงานในอีกอัน
อีกวิธีคือwatch -n1 date
คำสั่งซึ่งจะดำเนินการคำสั่งวันที่อย่างต่อเนื่องด้วยระยะเวลา 1 วินาที
ในบทสรุป:ฉันได้เรียนรู้บางสิ่งในขณะที่พยายามค้นหาคำตอบสำหรับคำถามนี้และฉันหวังว่าการค้นพบของฉันจะช่วยคุณในทางใดทางหนึ่งและฉันหวังว่าฉันจะสามารถช่วยเหลือคำถามนี้ได้ Byobu terminal 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 ชั่วโมง สำหรับการตรวจสอบข้อมูลเพิ่มเติมจากนี้ นอกจากนี้ยังมีโน้ตเล็ก ๆ ฉันใช้สิ่งต่าง ๆ หลังจากนั้นเพราะฉันไม่ได้ใช้ข้อความแจ้งสี
PS:โปรดแจ้งให้เราทราบหากฉันควรเพิ่มอะไรในคำตอบของฉันหรือแก้ไขในทางใดทางหนึ่ง แต่ส่วนใหญ่ฉันเชื่อว่านี่เป็นคำตอบที่สรุปที่สุดที่ฉันสามารถเกิดขึ้นได้และอย่างน้อยฉันก็ไม่ได้เพิ่มอะไรเลย ใหม่กับมัน
$PS1
ตัวแปร (พรอมต์) ให้มีเวลา แต่ฉันไม่แน่ใจว่าจะมีการเปลี่ยนแปลงหรือไม่