วิธีการเรียกสคริปต์หลังจากทุกคำสั่ง bash


22

เป็นไปได้ไหมที่จะเรียกสคริปต์ในตัวอย่างนี้ตั้งชื่อhey.shตามคำสั่ง bash ทุกคำ?

ตัวอย่างเช่นคุณพิมพ์lshit enter และ ls ทำงานจากนั้นhey.shจะเรียกใช้

จากนั้นคุณพิมพ์cd .. (หรือคำสั่งอื่น ๆ )จากนั้นซีดีhey.shจะทำงานและอื่น ๆ


2
นี่เป็นปัญหา XYหรือความคิดที่แปลกมาก คุณพยายามทำอะไรให้สำเร็จ
jasonwryan

ชื่อแทนใน bash.rc อาจจะ?
moonbutt74

คำตอบ:


29
PROMPT_COMMAND+="hey.sh;"

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


หมายเหตุ: ตัวแปรสภาพแวดล้อมเทียบกับตัวแปรเชลล์

โดยค่าเริ่มต้นPROMPT_COMMANDคือไม่ตัวแปรสภาพแวดล้อม มันเป็นเพียงตัวแปรเปลือก

ตัวแปรทั้งสองชนิดนั้นเข้าถึงได้ในลักษณะเดียวกัน ( "$variable*") แต่ตัวแปรสภาพแวดล้อมได้รับการสืบทอดโดยกระบวนการลูกในขณะที่ตัวแปรเชลล์ไม่ได้

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

ในbashคุณสามารถทำได้: declare -pเพื่อค้นหาว่าตัวแปรถูกส่งออก (= เป็นตัวแปรสภาพแวดล้อม) หรือไม่:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@ จอห์นไม่ทำไม่exportได้ เพียงแค่ตั้งค่า (หรือผนวกเข้ากับมันเช่นตามที่แสดงด้านบน)
PSkocik

เรียบร้อยแล้วหลังจากนั้นล่ะ
moonbutt74

2
@ moonbutt74 ก่อนคำสั่งทุกคำสั่ง == หลังจากทุกคำสั่ง + ที่จุดเริ่มต้นของเซสชั่นทุบตีของคุณ
PSkocik

@PSkocik ฉันได้รับฉันแค่อยากรู้อยากเห็นว่าเป็นตัวแปรด้านสิ่งแวดล้อมแล้วตามคำสั่ง echo อย่างรวดเร็วฉันพบว่ามันเป็น สิ่งนี้ทำในสิ่งที่ฉันกำลังมองหาอย่างแน่นอน
John

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