ที่เกี่ยวข้อง: ล่ามเชลล์คนใดรันสคริปต์ที่ไม่มี shebang
สคริปต์ไม่ได้ shebang / hashbang / สายเพียงเพราะรีบคู่ไม่ได้#!
#!
อย่างไรก็ตามสคริปต์ที่จะได้รับการดำเนินการโดยเชลล์ (ดูคำถามและคำตอบเชื่อมโยงดังกล่าว) และในเปลือกว่าถ้า-
เป็นตัวละครที่ถูกต้องในชื่อฟังก์ชันสายประกาศฟังก์ชั่นเปลือกที่เรียก--
ว่าไม่ทำอะไรเลย (ดีมันวิ่ง:
, ซึ่งไม่ทำอะไรเลย ) และสิ่งที่ไม่เคยเรียก
ฟังก์ชันในสัญกรณ์หลายบรรทัดที่พบบ่อยมากขึ้น (เพื่อให้ชัดเจนมากขึ้นว่ามันเป็นอย่างไรในขณะที่ชื่อแปลก ๆ ของมันค่อนข้างคลุมเครือความจริงที่ว่ามันเป็นฟังก์ชั่นจริง ๆ ):
-- () {
:
}
วัตถุประสงค์เพียงอย่างเดียวของการกำหนดฟังก์ชั่นคือการมีบรรทัดที่ถูกต้องในเชลล์สคริปต์และในเวลาเดียวกันคำสั่ง SQL ที่ถูกต้อง (ความคิดเห็น) การจัดเรียงของรหัสนี้เรียกว่าพูดได้หลายภาษา
หลังจากประกาศฟังก์ชั่น bogus เชลล์สคริปต์เมื่อดำเนินการโดยล่ามเชลล์สคริปต์ใช้exec
เพื่อแทนที่เชลล์ปัจจุบันด้วยกระบวนการที่เกิดจากการทำงานdb2 -txf "$0"
ซึ่งจะเหมือนกับการใช้db2 -txf
กับชื่อพา ธ ของสคริปต์จากบรรทัดคำสั่ง
เคล็ดลับนี้อาจไม่ทำงานได้อย่างน่าเชื่อถือในระบบที่dash
หรือash
เปลือกอื่น ๆ ที่ใช้yash
, เชลล์เป้าหมายksh88
หรือksh93
ใช้เป็น/bin/sh
เพราะเชลล์เหล่านี้ไม่ยอมรับฟังก์ชั่นที่มีชื่อมีเครื่องหมายขีดกลาง
ยังเกี่ยวข้องกับ:
ฉันคิดว่าต่อไปนี้จะใช้งานได้ (ไม่ผ่านการทดสอบจริง ๆ ):
--() { exec db2 -txf "$0"; }; --