ใช้สคริปต์ด้วย“ "และกับ" แหล่งที่มา "


25
  1. ฉันสงสัยว่าสองวิธีต่อไปนี้ในการใช้งานสคริปต์ทุบตีนั้นเทียบเท่าหรือไม่

    . ./myScript.sh
    
    source myScript.sh
  2. พวกเขาทั้งสองกำลังเรียกใช้เนื้อหาของสคริปต์แทนที่จะเรียกใช้สคริปต์เช่นไม่สร้าง subshell สำหรับเรียกใช้สคริปต์หรือไม่

1
เฮ้นั่นมันอยู่ใน manpage!
alex

@alex: แสดงให้ฉันหน่อยได้ไหม man ., man sourceหรือสิ่งที่ฉันยังไม่ทราบว่ายัง
ทิม

2
ดูtype .และhelp .
rozcietrzewiacz

man $SHELL,/source
alex

4
. เป็นแบบพกพามากขึ้นตามที่คนอื่น ๆ
l0b0

คำตอบ:


21
  1. พวกเขาเท่าเทียมกันในการทุบตีเมื่อพวกเขาทำสิ่งเดียวกัน บนมืออื่น ๆ , sourceเป็น 5 ตัวอักษรอีกต่อไปและไม่ได้พกพาไปหอย POSIX เดียวหรือบอร์นในขณะที่.(dot) sourceดังนั้นฉันไม่เคยรำคาญใช้

  2. ถูกต้อง - การหาไฟล์เรียกใช้คำสั่งในเชลล์ปัจจุบันและจะส่งผลต่อสภาพแวดล้อมเชลล์ปัจจุบันของคุณ คุณยังคงสามารถส่งผ่านข้อโต้แย้งไปยังไฟล์ที่มาและทุบตีจริง ๆ แล้วจะค้นหา$PATHชื่อไฟล์เช่นเดียวกับคำสั่งปกติถ้ามันไม่มีสแลชใด ๆ


ไม่เกี่ยวข้องกับคำถามดั้งเดิมของ.vs sourceแต่ในตัวอย่างของคุณ

. ./myScript.sh 

ไม่เหมือนกัน

source myScript.sh

เพราะในขณะที่.และsourceเป็นหน้าที่เหมือนกันmyScript.shและ./myScript.shไม่เหมือนกัน นับตั้งแต่มีการเฉือนก็ตีความว่าเป็นเส้นทางและเปลือกใช้เพียง./myScript.sh ./myScript.shอย่างไรก็ตามmyScript.shไม่มีสแลชดังนั้นเชลล์จะ$PATHค้นหาก่อน นี่คือPOSIX ระบุมาตรฐาน.พฤติกรรม เปลือกหอยส่วนใหญ่เริ่มต้นนี้แม้ว่าพวกเขาอาจเพิ่มส่วนขยาย (เช่นการค้นหาในไดเรกทอรีการทำงานปัจจุบันหลังจากการค้นหาเส้นทาง) หรือตัวเลือกในการปรับเปลี่ยนพฤติกรรมของ/.source


2
พฤติกรรมเมื่อพา ธ ที่ระบุของไฟล์ไม่มีการ/เป็นแบบเชลล์ขึ้นอยู่กับbashและzshขึ้นอยู่กับว่าเปิดใช้งานโหมด POSIX หรือไม่ นอกจากนี้ยังทราบว่าในการใช้งาน ksh หลายพฤติกรรมที่แตกต่างจาก. source
Stéphane Chazelas

@StephaneChazelas ใช่คุณพูดถูก ฉันเพิ่มบันทึกย่อเพื่อชี้แจงว่าคำอธิบายข้างต้นเป็นมาตรฐาน POSIX
jw013

8

ใช่พวกเขาเทียบเท่า ไม่มีความแตกต่างการทำงาน เป็นเพียงคำพ้องความหมายในตัวสำหรับ.source

(แก้ไข: เห็นได้ชัดว่านี่เป็นเพียงความจริงสำหรับbashและzshบางหอยเบาไม่ต้อง. sourceเพียง.ระบุโดย POSIX ดังนั้นksh, dash, ashและอื่น ๆ อาจจะไม่ได้sourceดู. คำตอบ jw013 ของข้อมูล.)


ขอบคุณ! แต่เอาท์พุท$ alias . bash: alias: .: not found
ทิม

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