อะไรคือความแตกต่างระหว่าง "แหล่งที่มา" และ "."


147

อะไรคือความแตกต่างระหว่างการเรียกใช้งานสคริปต์ (เช่น / some / script) กับsource /some/scriptและ. /some/scriptใน Bash?

คำตอบ:


134

sourceและ.มีความหมายเหมือนในทุบตี

สำหรับทุกคนที่อาจต้องการตรวจสอบว่าคำสั่งที่เป็นเพียงคำพ้องความหมายและไม่มีอะไรเพิ่มเติมให้ดูที่รหัสที่มากล่าวว่าสำหรับรุ่น 4.3 builtins/source.defและตรวจสอบไฟล์ คุณจะอ่านว่าทั้งสองของคำสั่งในตัว, sourceและใช้ฟังก์ชันเดียวกันมาก:.source_builtin


สิ่งนี้กำหนดไว้ที่ไหน ฉันหมายถึงคือ นามแฝงสำหรับแหล่งที่มาหรือเป็นอย่างอื่นหรือไม่
binW

สิ่งเดียวกันที่แน่นอน

12
@binW: .เป็นคำสั่งแหล่งดั้งเดิมสืบทอดมาจากเปลือก bourne โบราณ sourceเป็นเพียงทุบตีในตัวที่ไม่เหมือนกับ.สันนิษฐานว่าเป็นเพราะมันสามารถอ่านได้มากขึ้น ( .คนเดียวอาจจะยากที่จะมองเห็นด้วยตัวอักษรขนาดเล็ก) คุณจะเห็นhelp sourceและhelp .แสดงข้อมูลเดียวกัน
geirha

3
@binW: ถ้าคุณดูในman bashแล้วค้นหาsourceคุณจะเห็นว่าเป็นคำพ้องสำหรับsource filename [arguments] . filename [arguments]
Matthew Rankin

46

.มีความหมายเหมือนกันกับsourceในทุบตี แต่ไม่ใช่ใน POSIX sh ดังนั้นคุณควรใช้.ถ้าสคริปต์ของคุณถูกเรียกใช้โดย / bin / sh โปรดทราบว่า bash อ้างว่าทำงานเหมือน POSIX sh เมื่อถูกเรียกเป็น / bin / sh แต่ยอมรับsourceโดยไม่มีการร้องเรียน

พฤติกรรมนี้กัดฉันสคริปต์ทดสอบกับ bash เป็น / bin / sh ล้มเหลวเมื่อทำงานภายใต้เถ้าตัวอย่างเช่น


16
POSIX ไม่ได้ จำกัด เปลือก POSIX เพิ่งพูดว่า; เชลล์จะสนับสนุนอย่างน้อยนี่และฟีเจอร์นั้น ดังนั้น POSIX เชลล์มีอิสระที่จะใช้คุณสมบัติเพิ่มเติมตราบใดที่มีการใช้งานคำอธิบายโดย POSIX เมื่อ shebang กล่าวว่า#!/bin/shคุณไม่ควรถือว่าเชลล์สนับสนุนอะไรเลยนอกจากคุณสมบัติ POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/…
geirha

คุณอาจได้รับผลกระทบจากลำดับการค้นหาชื่อ: unix.stackexchange.com/q/17815/8250
Lekensteyn

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