หากสคริปต์ควรถูกดำเนินการในเชลล์ปัจจุบันสามารถทำได้โดยการเพิ่มจุดก่อนคำสั่ง:
. ./somescript.sh
มีวิธีทำเช่นนี้โดยไม่ต้องพิมพ์จุดทุกครั้งหรือไม่ ตัวอย่างเช่นคำสั่งเปลี่ยนเป็น parent parent จากสคริปต์เอง?
หากสคริปต์ควรถูกดำเนินการในเชลล์ปัจจุบันสามารถทำได้โดยการเพิ่มจุดก่อนคำสั่ง:
. ./somescript.sh
มีวิธีทำเช่นนี้โดยไม่ต้องพิมพ์จุดทุกครั้งหรือไม่ ตัวอย่างเช่นคำสั่งเปลี่ยนเป็น parent parent จากสคริปต์เอง?
คำตอบ:
อาจไม่ใช่สิ่งที่คุณต้องการ แต่คุณสามารถทำได้:
alias somescript.sh='. ./somescript.sh'
มีวิธีทำเช่นนี้โดยไม่ต้องพิมพ์จุดทุกครั้งหรือไม่ ตัวอย่างเช่นคำสั่งเปลี่ยนเป็น parent parent จากสคริปต์เอง?
ฉันไม่คิดว่ามี (นอกเหนือจากการพิมพ์source somescript.sh
แต่นั่นอาจไม่ใช่สิ่งที่คุณกำลังมองหา ^^)
หากคุณรันสคริปต์ตามปกติด้วย./somescript.sh
ดังนั้นเชลล์จะ forks และเรียกใช้งานคำสั่งนี้ มันส่งคำสั่งไปยังเคอร์เนลแล้วเคอร์เนลตัดสินใจว่าจะดำเนินการคำสั่งนี้โดยการแยก#!
บรรทัดภายในสคริปต์ เคอร์เนลจะเปิดตัวล่ามที่ระบุ (ในกรณีนี้อาจเป็นbash
subshell) ดังนั้นการปรับเปลี่ยนที่somescript.sh
ทำกับสภาพแวดล้อมของมันจะถูกแยกในเชลล์ย่อยโดยไม่มีผลกระทบกับพาเรนต์เชลล์
หากคุณต้องการให้เชลล์อ่านสคริปต์โดยไม่ต้องเปิดใช้กระบวนการอื่นคุณต้องบอกด้วยการใช้คำสำคัญ.
หรือsource
alias
คำสั่งเหมือนสกอตต์ที่แนะนำ
หากคุณดำเนินการ./somescript.sh
เป็นโปรแกรมภายนอกจะไม่สามารถทำสิ่งใดในกระบวนการเชลล์ที่กำลังทำงานอยู่เช่นการเข้าถึงตัวแปรที่ไม่ได้ถูกเอ็กซ์พอร์ตการตั้งค่าตัวแปรการเปลี่ยนไดเรกทอรีปัจจุบัน ฯลฯ ไม่มีวิธีแก้ไขปัญหานี้
(ดีแล้วคุณอาจสามารถเรียกใช้ดีบักเกอร์จากกระบวนการย่อยและปรับแต่งหน่วยความจำของกระบวนการพาเรนต์ แต่ถ้าคุณลองผลลัพธ์ที่เป็นไปได้มากที่สุดคือการล่มเชลล์พาเรนต์)
. ./somescript.sh
คุณจำเป็นต้องใช้ คุณสามารถซ่อนที่อยู่ด้านหลังนามแฝงหรือฟังก์ชั่นได้หากต้องการ แต่ต้องกำหนดนามแฝงหรือฟังก์ชันอีกครั้งในพาเรนต์เชลล์
ฉันคิดว่าสคริปต์ที่คุณพยายามเรียกใช้นั้นไม่สามารถใช้งานได้ chmod a+x somescript.sh
จะเพิ่มบิตเรียกใช้งานสำหรับผู้ใช้กลุ่มและอื่น ๆ (ugo) ลงในไฟล์ บรรทัดแรกของไฟล์จะต้องมี #! #!/bin/bash
แถวที่ด้านบนเช่น
ls -l somescript.sh
จะแสดง rwx triplets (อ่าน / เขียน / เรียกใช้) สำหรับไฟล์ มันจะต้อง x อย่างน้อยในชุดแรกสมมติว่าคุณเป็นเจ้าของไฟล์
export PATH=$PATH:/usr/local/bin
การเพิ่ม / usr / local / bin ไปยัง $ PATH ของคุณคุณต้องทำการจัดหาไฟล์เพื่อเปลี่ยนตัวแปรสภาพแวดล้อมการทำงานของคุณ คำถามนี้เป็นคำถามที่ว่า "ฉันจะเปลี่ยนตัวแปรสภาพแวดล้อมของฉันในเชลล์ที่กำลังรันจากสคริปต์ทุบตีโดยทางโปรแกรมได้อย่างไร" สคริปต์. ./somescript.sh
กำลังดำเนินการได้ดี - คุณกำลังใช้คำสั่ง dot to source ในไฟล์ tcsh ใช้ "source" สำหรับสิ่งเดียวกัน
export PATH=$PATH:.
การรันคำสั่งนั้นในเชลล์หรือเพิ่มลงในไฟล์คอนฟิกูเรชันเชลล์ของคุณจะผนวกไดเร็กทอรีปัจจุบันเข้ากับตัวแปร PATH ตัวแปร PATH คือรายการของไดเรกทอรีที่เชลล์ของคุณจะมองหาไบนารีเพื่อดำเนินการเมื่อคุณออกคำสั่ง
สิ่งนี้จะอนุญาตให้คุณเรียกใช้ไฟล์ปฏิบัติการใด ๆ ในไดเรกทอรีปัจจุบันโดยไม่ต้อง ./
.
ไม่ใช่ชื่อ./
ที่เป็นส่วนหนึ่งของชื่อไฟล์ เล่น ./somescript ไม่ได้ดำเนินการในเปลือกปัจจุบันเป็น. ./somescript
ไม่