การเพิ่มการประทับเวลาในเทอร์มินัลพรอมต์?


53

ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเพิ่มการประทับเวลาลงในพรอมต์เทอร์มินัลและถ้าเป็นเช่นนั้นฉันจะทำสิ่งนี้ได้อย่างไร


ตรวจสอบลิงค์นี้เพื่อแสดงนาฬิกาที่ทำงานอยู่ในซิงค์
มานะ

คำตอบ:


60

เพิ่มบรรทัดนี้ใน~/.bashrcไฟล์:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

ดังนั้นผลลัพธ์จะเป็นดังนี้:

[07:00:31] user@name:~$

บางครั้งฉันพบว่าเวลาไม่ถูกต้องและเก่ากว่ามีความล่าช้าบ้าง ฉันว่าฉันสามารถใช้มันเพื่อดูว่าคำสั่งบางอย่างใช้เวลานานแค่ไหน นั่นเป็นอย่างไร
Kevin Simper

2
@ devav2: มีวิธีระบุเขตเวลาหรือไม่?
ฮิปโป

มีวิธีที่คุณสามารถเพิ่มการประทับเวลาลงในเทอร์มินัลเมื่อคุณใช้รูทได้หรือไม่? ฉันมีเวลาประทับเมื่อฉันเป็นผู้ใช้ปกติเท่านั้น ขอบคุณ
Yufenyuy Veyeh Dider

4
สำหรับdateคำสั่งคุณสามารถแทนที่ด้วย+%H:%M:%S +%T
snapfractalpop

5
นี้เมากับการตัดขั้วของผมดังนั้นผมจึงใช้วิธีการที่มีรายละเอียดที่นี่แทน มันเป็นเพียงเพิ่ม '\ D {% T}' ไปยัง PS1 ของคุณ
rbennett485

25

วิธีแก้ปัญหาของฉันคือใช้http://bashrcgenerator.com/เพื่อสร้างบรรทัด PS1 นี้เพื่อใส่ใน. bashrc:

export PS1="\t [\u@\h \W]\\$ \[$(tput sgr0)\]"

ซึ่งจะมีลักษณะดังนี้

13:05:54 [chad@work-laptop:~/Downloads]$ ls -al

การใช้ PROMPT_COMMAND ทำให้ประวัติของฉันยุ่งเหยิง เมื่อมีแถวยาวขึ้นขณะที่ขี่จักรยานไปตามประวัติศาสตร์มันจะตัดส่วนท้ายของพรอมต์ด้วยจำนวนอักขระที่เท่ากันกับเวลาประทับที่เพิ่มไว้ด้านหน้า เช่น

13:14:38 [chad@work-laptop:~/Doexport PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] "

และบรรทัดนี้ไม่สามารถแก้ไขได้เนื่องจากไม่แสดงอักขระในตำแหน่งที่ถูกต้องเนื่องจากคุณไม่ได้พิมพ์ในที่ที่ดูเหมือนว่าคุณกำลังพิมพ์

ฉันเดาว่ามันสามารถทำได้ด้วย PROMPT_COMMAND บางทีโดยใช้ส่วน [$ (tput sgr0)] แต่ PS1 ใช้ได้


ลิงค์ที่นี่ยอดเยี่ยมสำหรับการปรับแต่งแสตมป์เพิ่มเติม
cellepo

16

แทนการเพิ่มวันที่ตัวเองพร้อมท์คุณสามารถเพิ่มวันก่อนที่รวดเร็วของคุณโดยการวางบรรทัดต่อไปนี้ที่ด้านบน.bashrcของคุณ cowsayสำหรับการทำงานคุณยังจะต้องติดตั้ง มันเป็นวิธีที่สนุกในการแสดงวันที่พร้อมกับแสดงข้อความสั้น ๆ :

cowsay "Welcome $USER! It's now $(date '+%A %B %d %Y %r')"

ในรูปแบบปัจจุบันมันจะทำงานในระบบของทุกคนโดยไม่ต้องแก้ไขตามที่อ่าน$USERและdateตัวแปรจากสภาพแวดล้อมปัจจุบัน

ป้อนคำอธิบายรูปภาพที่นี่


8
จุดที่ใส่ไว้ในพรอมต์คือการรู้ว่าครั้งสุดท้ายที่คุณทำคำสั่งเฉพาะคืออะไร
James Oltmans

6

เนื่องจากฉันมีคะแนนชื่อเสียงไม่เพียงพอที่จะเพิ่มความคิดเห็นในคำตอบเพื่อปรับปรุง ดูเหมือนว่าวิธีเดียวที่ฉันสามารถเพิ่มข้อมูลคือการสร้างคำตอบที่สอง ดังนั้นฉันจะทำซ้ำสิ่งที่พูดว่าเป็นคำตอบและสร้างสิ่งนั้น

แก้ไขไฟล์. bashrc สำหรับผู้ใช้ที่คุณต้องการให้มีการประทับตราวันที่

หากคุณเห็น "user @ host: ~ $" คุณจะอยู่ในไดเรกทอรีหลักของผู้ใช้ปัจจุบัน ไฟล์. bashrc เป็นไฟล์ที่ซ่อนอยู่เนื่องจากมีคำนำหน้าด้วยจุด "." หากต้องการดูในรายการคุณจะต้องใช้รายชื่อยาว

คุณสามารถใช้ "ls -a" และคุณควรเห็นไฟล์ ".bashrc"

แก้ไขไฟล์ด้วยโปรแกรมแก้ไขข้อความ สำหรับ exmaple "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" หรือเครื่องมือแก้ไขที่คุณต้องการใช้

หากคุณต้องการสคริปต์นี้และวางแผนที่จะเพิ่มลงในเชลล์จำนวนมากสำหรับผู้ใช้หลายคนอาจเป็นประโยชน์ในการใช้คำสั่ง "echo" ร่วมกับตัวดำเนินการผนวก ">>" ตัวอย่างเช่น,

echo "export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"" >> .bashrc

หากคุณใช้วิธีการนี้ต้องแน่ใจว่าคุณอยู่ในไดเรกทอรีการทำงานปัจจุบันของผู้ใช้ที่คุณต้องการแก้ไข เพื่อตรวจสอบสิ่งนี้คุณสามารถใช้คำสั่ง "pwd" หรือพิมพ์ไดเรกทอรีการทำงาน

หากคุณไม่ชอบช่องว่างพิเศษระหว่างวงเล็บ "" "และชื่อผู้ใช้ให้ใช้ regex ที่ปรับเปลี่ยนเล็กน้อยนี้:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"

ใช้สิ่งนี้หากคุณกำลังแก้ไขไฟล์โดยตรง


1
คุณสามารถแนะนำการแก้ไข
muru


1

เปิดของคุณ.bashrcผ่าน

vim ~/.bashrc

แล้วเพิ่มในรายการต่อไปนี้เพื่อ.bashrc:

#PS1="[\A \u@\h \W\a]$" 

โดยที่\Aเวลา ( \Wสำหรับจุดสิ้นสุดของเส้นทางเท่านั้นเอาออกถ้าคุณต้องการเส้นทางไดเรกทอรีการทำงานปัจจุบันทั้งหมด) จากนั้นพิมพ์

source ~/.bashrc

คุณจะเห็นสิ่งนี้:

[16:04 trwood@cobalt04 ~/MCEq_dev]$

1
การลบ\Wจะไม่แสดงเส้นทางใด ๆ เลย \wจะให้เส้นทางเต็ม
Zanna

0

เพียงเพิ่มคำตอบของ @ devav2:

คำสั่ง echo ที่อ่านง่ายสำหรับมือใหม่คือ:

export PROMPT_COMMAND='echo -n "$(date +%H:%M:%S) "'

แทน

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

เนื่องจากคำสั่ง echo ไม่ได้ถูกประเมินค่าในเวลาของการเอ็กซ์พอร์ตมันเหมาะสมกว่าที่จะใช้เครื่องหมายคำพูดเดี่ยวสำหรับการอ้างอิงข้อความแทนที่จะเป็นเครื่องหมายคำพูดคู่ การใช้คำพูดเดียวที่จะพูดคำสั่งทั้งหมดแล้วช่วยให้คุณใช้คำพูดสองจะพูดโต้แย้งไปยังคำสั่ง echo ไม่จำเป็นต้องที่จะหลบหนีตัวอักษรพิเศษเช่น, [และ$


1
escapes จะถูกใช้สำหรับการจัดรูปแบบ (วงเล็บ) ฉันไม่เห็นสิ่งนี้จะเพิ่มคำตอบที่ยอมรับได้
Elder Geek

คุณสามารถเพิ่มลงใน 'echo -n "$ (วันที่ +% H:% M:% S)"' ด้วย: 'echo -n "[$ (วันที่ +% H:% M:% S)]"' โดยไม่ต้อง ต้องหลบหนีพวกเขา ข้อได้เปรียบในการใช้สตริงเป็นข้อโต้แย้งคำสั่ง echo คือตอนนี้คุณไม่จำเป็นต้องหลบหนีสิ่งที่ประเมินทุบตีเป็นอย่างอื่นทำให้อ่านง่ายขึ้น
qwertyzw

@ElderGeek ฉันเพิ่มการชี้แจงเพิ่มเติม ฉันหวังว่าจะช่วย
qwertyzw

0

ฉันคิดว่าวิธีที่ถูกต้องในการดำเนินการคือค้นหาใน$HOME/.bashrcรหัสที่กำหนดPS1แสดงความคิดเห็นและเพิ่มรหัสส่วนตัว นี่คือบล็อกของฉันเช่น:

PS1_DATE="\D{%Y-%m-%d %H:%M:%S}"

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

เอาท์พุท:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"

0

ไวยากรณ์ที่ง่ายที่สุดในการแสดงการประทับเวลาในพรอมต์คำสั่งอาจเป็น:

    PS1='\D{%F} \t $...'

ที่ไหน

\D{format}มีการจัดรูปแบบวันที่ (ดูที่man bashส่วนการรวบรวม) เป็น

%Fวันที่เต็ม เหมือนกับ% Y-% m-% d (ดูman dateส่วน FORMAT) และ

\tเป็นเวลาปัจจุบันในรูปแบบ HH: MM: SS ตลอด 24 ชั่วโมง (ดูman bashหัวข้อ PROMPTING)

nano ~/.bashrc

ทำการเปลี่ยนแปลงตัวแปร PS1 ตามที่แสดงด้านบน

source ~/.bashrc

0

เวลาของฉันคล้ายกับcowsayคำตอบข้างต้น คุณจะต้องใส่nowของคุณแต่คุณยังสามารถเรียกมันจากท่าเรือโดยการพิมพ์~/.bashrcnow

นี่คือภาพหน้าจอ:

now.png

รหัสทุบตีจะโพสต์ในคำตอบอย่างละเอียดนี้:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.