. executable
ไวยากรณ์ไม่ได้ทำงานกับเพียงใดปฏิบัติการ (หรือไม่ได้หรือไม่) แต่มันเป็นนามแฝงสำหรับ bash source
ในตัว ดังนั้นความแตกต่างส่วนใหญ่เกี่ยวข้องกับสคริปต์ทุบตีและความจริงก็คือพวกมันต่างกันโดยสิ้นเชิง :)
./executable
ขอให้เรียกใช้ปฏิบัติการ "ปกติ" ./
เป็นการอ้างอิงแบบสัมพัทธ์กับพา ธ ปัจจุบัน วิธีนี้จะหลีกเลี่ยงการมีเชลล์ (ทุบตี) พยายามค้นหาไฟล์ที่เรียกใช้งานได้ในไดเรกทอรีที่อยู่$PATH
(ซึ่งจะทำถ้าคุณไม่ได้ระบุพา ธ เลยด้วยคำสั่ง) เหตุผลที่คุณไม่สามารถทำได้เพียงexecutable
เพราะความปลอดภัย ls
คิดคุณยกเลิกการบีบอัดข้อมูลที่เก็บคุณดาวน์โหลดและจะมีรุ่นที่เป็นอันตรายของ หากเรียกใช้โดยตรงจากไดเรกทอรีปัจจุบันของคุณคุณจะต้องเรียกใช้เวอร์ชันนั้นโดยไม่ทราบ
ในทางตรงกันข้าม. executable
จะพูดว่า "แหล่งไฟล์ชื่อexecutable
" เนื่องจากคุณตั้งชื่อไฟล์โดยตรงและไม่จำเป็นต้องเป็นไฟล์ปฏิบัติการข้อ จำกัด ด้านความปลอดภัยสำหรับ $ PATH จึงไม่สามารถใช้งานได้ การจัดหาจะเชลล์สคริปต์ "รัน" (หรือดูเหมือนว่าจะทำงาน) เท่านั้น มันคืออะไร:
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command exe‐
cuted from filename.
ดังนั้น ... อะไรคือความแตกต่างระหว่างการดำเนินการและการจัดหา? สมมติว่าเชลล์สคริปต์เดียวกันทำงานมัน ( ./script
) จะวางไข่เชลล์ใหม่รันสคริปต์ภายในเชลล์นั้นและเมื่อสคริปต์ออกให้ปิดเชลล์นั้นแล้วกลับไปที่พาเรนต์เชลล์ ผลก็จะเริ่มbash
กระบวนการใหม่เพื่อรันสคริปต์)
( . script
) จะทำให้เชลล์ปัจจุบันอ่านคำสั่งจากไฟล์ราวกับว่าพวกมันถูกพิมพ์ในบรรทัดคำสั่ง ไม่มีกระสุนใหม่เกิดขึ้น
exit
วิธีที่ง่ายมากที่จะดูว่าจะทำงานนี้คือการเขียนสคริปต์ที่มีเพียง หากคุณ./script
ดูเหมือนจะไม่มีอะไรเกิดขึ้นนี่เป็นเพราะกระบวนการเชลล์ใหม่เริ่มต้นขึ้นexit
คำสั่งจะออกจากเชลล์ใหม่และเชลล์ปัจจุบันของคุณที่ไม่ได้รับผลกระทบ
หากคุณ. script
คุณเทอร์มินัลปัจจุบันจะปิดลงเนื่องจากexit
คำสั่งรันในเชลล์ปัจจุบัน ดังนั้นจึงเทียบเท่ากับการพิมพ์exit
บนพรอมต์คำสั่ง