รันสคริปต์ bash ทุกครั้งเมื่อเรียกใช้งานบรรทัดคำสั่ง


9

ฉันเป็นผู้ใช้ Ubuntu / Linux ใหม่ฉันต้องการถามคำถามตามชื่อของฉันด้านบน

ตัวอย่างเช่นฉันมีไฟล์ทุบตี./scriptฉันต้องการให้มันทำงานโดยอัตโนมัติเมื่อฉันพิมพ์บรรทัดคำสั่งใด ๆ เมื่อฉันรันบรรทัดคำสั่งpwdแล้ว./scriptจะถูกดำเนินการ เมื่อฉันพิมพ์บรรทัดคำสั่งถัดไปls -laแล้ว./scriptจะดำเนินการอีกครั้ง


4
เราขอถามได้ว่า: คุณตั้งใจจะทำอะไรกับคำสั่งแต่ละคำสั่งที่พิมพ์ลงไป? และควรสำหรับผู้ที่พิมพ์ด้วยการโต้ตอบเท่านั้น? หรือสำหรับคำสั่งใด ๆ ในสคริปต์? และสิ่งที่เกี่ยวกับคำสั่งพิมพ์มากกว่า ssh? ฯลฯ อาจเป็นXYProblem
Olivier Dulac

คำตอบ:


13

คุณต้องตั้งค่าPROMPT_COMMANDตัวแปร จากman bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

ตัวอย่างเช่นนี้จะเขียนวันที่ปัจจุบันลงใน/tmp/PCทุกครั้งที่มีการดำเนินการคำสั่ง:

 $ PROMPT_COMMAND="date > /tmp/PC"

1
ใช่ฉันเข้าใจแล้ว .. วิธีแก้ปัญหาที่ยอดเยี่ยม (upvoted)
Ender Phan

1
นี่เป็นสิ่งที่ผิด คำสั่งecho $(date)จะถูกเรียกใช้ในเวลาที่ประกาศดังนั้นจะแสดง (บันทึก) ในเวลาเดียวกันเสมอ
heemayl

@ heemayl: แน่นอนคุณพูดถูกฉันซ่อมแล้ว
Arkadiusz Drabczyk

@ lộcphanหากคำตอบข้อใดข้อหนึ่งเหล่านี้แก้ไขปัญหาของคุณได้โปรดสละเวลาสักครู่และยอมรับโดยคลิกที่เครื่องหมายถูกทางด้านซ้าย ที่จะทำเครื่องหมายคำถามว่าตอบแล้วและเป็นวิธีที่แสดงความขอบคุณในเว็บไซต์ Stack Exchange
terdon

@ heemayl: ทำไม ...
Arkadiusz Drabczyk

11

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

ตัวอย่างเช่นตั้งค่าเป็น:

export PROMPT_COMMAND='/path/to/script'

ทำสคริปต์, /path/to/scriptให้ทำงานได้ก่อน

ตอนนี้สคริปต์จะทำงานหลังจากแต่ละคำสั่ง

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

PROMPT_COMMAND='/path/to/script'

จากman bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

ฉันเข้าใจแล้วขอบคุณมากสำหรับความช่วยเหลือของคุณ :) (upvoted btw)
Ender Phan

ทำไมคุณใช้export?
Arkadiusz Drabczyk

@ArkadiuszDrabczyk exportจะทำให้ตัวแปรPROMPT_COMMANDเป็นตัวแปรสภาพแวดล้อมนั่นคือตัวแปรนั้นจะสามารถใช้ได้กับกระบวนการลูกทั้งหมด (เช่น subshells) ของเชลล์ปัจจุบัน หากคุณเพียงแค่ต้องการที่จะกักตัวไว้ในเซสชั่นเปลือกปัจจุบันเท่านั้น (ตัวแปรเปลือก) exportลบ
heemayl

5
@ heemayl: IMO exportไม่ใช่วิธีปฏิบัติที่ดีที่นี่ - PROMPT_COMMANDควรตั้งค่าในไฟล์เริ่มต้นเชลล์แบบโต้ตอบเท่านั้นและไม่ควรมองเห็นได้ในสภาพแวดล้อม
Arkadiusz Drabczyk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.