อีกวิธีหนึ่งคือการเรียกล่ามและส่งผ่านเส้นทางไปยังสคริปต์ไปที่:
/bin/sh /path/to/script
จุดและแหล่งที่มานั้นเทียบเท่ากัน (แก้ไข: ไม่พวกเขาไม่ได้: ในฐานะที่ KeithB ชี้ให้เห็นในความคิดเห็นเกี่ยวกับคำตอบอื่น "." ทำงานเฉพาะในเชลล์ที่เกี่ยวข้องกับ bash โดยที่ "ซอร์ส" ทำงานได้ทั้งเชลล์ bash และ csh ที่เกี่ยวข้อง) มันรันสคริปต์ใน -place (ราวกับว่าคุณคัดลอกและวางสคริปต์ไว้ตรงนั้น) ซึ่งหมายความว่ายังคงมีฟังก์ชั่นและตัวแปรอื่น ๆ นอกจากนี้ยังหมายความว่าหากสคริปต์ทำซีดีลงในไดเรกทอรีคุณจะยังอยู่ที่นั่นเมื่อดำเนินการเสร็จ
วิธีอื่น ๆ ในการเรียกใช้สคริปต์จะเรียกใช้ใน subshell ของตัวเอง ตัวแปรในสคริปต์ยังคงมีอยู่เมื่อดำเนินการเสร็จ หากสคริปต์เปลี่ยนไดเรกทอรีแสดงว่าไม่มีผลกับสภาพแวดล้อมการโทร
/ path / to / script และสคริปต์ / bin / sh แตกต่างกันเล็กน้อย โดยทั่วไปสคริปต์จะมี "shebang" ในตอนต้นที่มีลักษณะดังนี้:
#! /bin/bash
นี่คือพา ธ ไปที่ล่ามสคริปต์ ถ้ามันระบุล่ามที่แตกต่างจากที่คุณทำเมื่อคุณดำเนินการมันก็อาจทำงานแตกต่างกัน (หรืออาจไม่ทำงานเลย)
ตัวอย่างเช่นสคริปต์ Perl และสคริปต์ Ruby เริ่มต้นด้วย (ตามลำดับ):
#! /bin/perl
และ
#! /bin/ruby
หากคุณเรียกใช้หนึ่งในสคริปต์เหล่านั้นโดยการเรียกใช้/bin/sh script
แล้วจะไม่ทำงานเลย
จริง ๆ แล้ว Ubuntu ไม่ได้ใช้ bash shell แต่เป็นอันที่คล้ายกันมากที่เรียกว่า dash สคริปต์ที่ต้องใช้ทุบตีอาจทำงานผิดพลาดเล็กน้อยเมื่อถูกเรียกโดยทำ/bin/sh script
เพราะคุณเพิ่งเรียกสคริปต์ทุบตีโดยใช้ล่ามประ
ข้อแตกต่างเล็ก ๆ น้อย ๆ ระหว่างการเรียกใช้สคริปต์โดยตรงและส่งผ่านเส้นทางของสคริปต์ไปยังล่ามก็คือสคริปต์นั้นจะต้องทำเครื่องหมายว่าสามารถเรียกใช้งานได้โดยตรง แต่จะไม่เรียกใช้งานโดยการส่งผ่านเส้นทางไปยังล่าม
อีกรูปแบบย่อย: คุณสามารถนำหน้าวิธีใด ๆ เหล่านี้เพื่อรันสคริปต์ด้วย eval ดังนั้นคุณสามารถมี
eval sh script
eval script
eval . script
และอื่น ๆ มันไม่ได้เปลี่ยนแปลงอะไรเลย แต่ฉันคิดว่าฉันจะใส่ไว้เพื่อความทั่วถึง