คำสั่งก่อนทุกคำสั่ง bash


18

ไม่มีใครรู้วิธีการใส่คำสั่ง 'เวลา' ก่อนทุกคำสั่งในเซสชั่นทุบตี?


1
ดังนั้น ... คุณต้องการที่จะเติม 'เวลา' ให้กับ commandline อัตโนมัติทุกอัน?
ต้มตุ๋น quixote

1
ใช่รีบร้อน ... เพื่อให้ได้ประสิทธิภาพ mesuarament
jthoenes

เกี่ยวข้องsuperuser.com/questions/167283/…
lesmana

คำตอบ:


37

ขออภัยสำหรับคำตอบที่ผิดก่อนฉันคิดถึงคำถามของคุณ

หากต้องการเพิ่มเวลาก่อนทุกคำสั่งที่คุณเรียกใช้บนเชลล์คุณสามารถทำสิ่งนี้ได้

bind 'RETURN: "\e[1~time \e[4~\n"'

สิ่งนี้จะเชื่อมโยงคีย์ส่งคืน ตอนนี้ทุกครั้งที่คุณกด return แทนที่จะเขียนขึ้นบรรทัดใหม่ \ n มันจะไปที่จุดเริ่มต้นของบรรทัดป้อนข้อความ 'เวลา' และเว้นวรรคไปที่จุดสิ้นสุดของบรรทัดแล้วป้อนบรรทัดใหม่ \ n เพื่อให้ได้ผลลัพธ์ที่ต้องการ ผล

หากคุณไม่ต้องการเสียสละคีย์ของคุณคุณสามารถสร้างคีย์มาตรฐาน 'ที่สอง' ป้อนเช่น F12 โดยผูกคำสั่งเช่นนี้

bind '"\e[24~": "\e[1~time \e[4~\n"'

ตอนนี้แทนที่จะแทนที่ปุ่มส่งคืนที่คุณผูกไว้กับ F12

พื้นหลังทั้งหมดนี้คือ bash ที่ใช้ GNU readline เพื่ออ่านคำสั่ง ดังนั้น readline จะเป็นจุดเริ่มต้นที่ดีสำหรับการจัดการคำสั่งเพิ่มเติมเป็นต้น


1
+1 ทางออกที่ดี! ฉันชอบแนวคิดของการมีการเปรียบเทียบคีย์ป้อนแยกต่างหากจากคีย์ Enter ปกติ
ต้มตุ๋น quixote

นั่นเป็นความคิดที่ฉลาด คุณจะพูดคุยเรื่องนี้เพื่อเรียกใช้ฟังก์ชันที่ผู้ใช้กำหนดก่อนทุกคำสั่งได้อย่างไร ฉันไม่ทราบวิธีรวมโค้ด bash และฟังก์ชัน readline ในการเชื่อมโยงเดียวกัน
Gilles 'หยุดชั่วร้าย'

สิ่งนี้จะไม่ทำงานใน Mac หรือไม่? ฉันรันคำสั่งในเทอร์มินัลแล้วและคีย์ Enter ของฉันดูเหมือนจะไม่ทำอะไรเลยในตอนนี้
akki

6

ฉันรู้ว่านี่อยู่นอกขอบเขตของคำถามนี้ แต่ ...

ในzsh(ซึ่งเป็นความรู้ของฉันชุดสุดทุบตี) ถ้าคุณตั้งค่าตัวแปรต่อไปนี้ใน.zshrcไฟล์ของคุณ:

export REPORTTIME=5

ทุกคำสั่งที่ใช้เวลานานกว่า 5 วินาที (ผมค่อนข้างมั่นใจว่า) timeจะแสดงผลลัพธ์ของ คำสั่งทั้งหมดที่ดำเนินการเสร็จสมบูรณ์เร็วขึ้นไม่ และในกรณีเหล่านี้ไม่มีใครสนใจดังนั้นจึงเป็นเรื่องดีที่จะไม่เกะกะอะไรขึ้น นอกจากนี้ยังมีคุณสมบัติเจ๋ง ๆ มากมายzshที่คุณอาจสนุกไปกับมัน


เคล็ดลับที่ดี ในขณะที่zshมีฟังก์ชั่นการทำงานของbash อย่างแน่นอนแต่ไวยากรณ์ของมันไม่ได้เป็น superset ของไวยากรณ์ของbashดังนั้นจึงไม่ใช่การแทนที่ "drop in"
Chris Johnsen

1

รวม \ t ในสตริงข้อความแจ้งของคุณ มันจะรวมเวลาในการแจ้งของคุณ ณ จุดที่คุณรวมไว้ ดู: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/


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

ทรู; และความแตกต่างระหว่างเวลานั้นกับเวลาปัจจุบันของพรอมต์ถัดไปคือเวลาทำงาน (ลบด้วยเวลาพิมพ์แน่นอน - การวางคือเพื่อนของคุณที่นี่) ไม่จำเป็นต้องกำหนดคีย์ใหม่
JRobert

0

PS1ดูเหมือนเป็นวิธีมาตรฐานในการทำสิ่งนี้


2
มันปรับเปลี่ยนการแสดงผลไม่ใช่คำสั่งที่ดำเนินการจริง
user1686

@grawity Right - แต่มันจะทำให้คุณได้สิ่งที่คุณต้องการอย่างแท้จริง ... เวลาที่เตรียมไว้สำหรับทุกบรรทัด
Jason Sundram

3
ซึ่งแตกต่างอย่างสิ้นเชิงจากสิ่งที่timeทำ (วัดระยะเวลาที่ใช้ในการรันคำสั่ง)
user1686

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