เป็นไปได้ไหมที่จะเรียกสคริปต์ในตัวอย่างนี้ตั้งชื่อhey.shตามคำสั่ง bash ทุกคำ?
ตัวอย่างเช่นคุณพิมพ์lshit enter และ ls ทำงานจากนั้นhey.shจะเรียกใช้
จากนั้นคุณพิมพ์cd .. (หรือคำสั่งอื่น ๆ )จากนั้นซีดีhey.shจะทำงานและอื่น ๆ
เป็นไปได้ไหมที่จะเรียกสคริปต์ในตัวอย่างนี้ตั้งชื่อhey.shตามคำสั่ง bash ทุกคำ?
ตัวอย่างเช่นคุณพิมพ์lshit enter และ ls ทำงานจากนั้นhey.shจะเรียกใช้
จากนั้นคุณพิมพ์cd .. (หรือคำสั่งอื่น ๆ )จากนั้นซีดีhey.shจะทำงานและอื่น ๆ
คำตอบ:
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
exportได้ เพียงแค่ตั้งค่า (หรือผนวกเข้ากับมันเช่นตามที่แสดงด้านบน)