มาตรฐาน / แบบแผนอย่างเป็นทางการสำหรับส่วนขยายไฟล์สำหรับเชลล์สคริปต์ไปยังแหล่งที่มา


12

ฉันสงสัยว่ามีการประชุมสำหรับส่วนขยายประเภทไฟล์สำหรับเชลล์สคริปต์ที่คุณต้องการแหล่งที่มาแทนที่จะเรียกใช้ ตัวอย่างเช่น:

  1. ถ้าฉันต้องการเรียกใช้สคริปต์นี้ใน subshell

    ./script.sh 
  2. ถ้าฉันต้องการจำรันสคริปต์นี้จากเปลือกปัจจุบัน

    . script.source 

มีแบบแผน (เช่น POSIX เป็นต้น) สำหรับประเภทไฟล์ในตัวอย่างที่สองหรือไม่? สิ่งที่ต้องการ.sourceหรือ.sourceme?


ปรับปรุง

คำถามนี้ไม่ได้ถามเกี่ยวกับความคิดเห็นใด ๆ ฉันระบุชัดเจนว่าฉันต้องการทราบว่ามีนามสกุลไฟล์มาตรฐานสำหรับสคริปต์ประเภทนี้หรือไม่ คำถามนี้ใช้ความคิดเห็นน้อยกว่าคำถามที่ได้รับการตอบรับดีในประเด็นที่คล้ายกัน ( ใช้ส่วนขยาย. sh หรือ. bash สำหรับสคริปต์ทุบตี? )


1
บางคนคิดว่าเชลล์สคริปต์ที่สามารถรันไฟล์ปฏิบัติการ (เช่นเริ่มต้นด้วย#!/bin/shหรือคล้ายกันไม่ควรมีส่วนขยายเพราะผู้ใช้ไม่จำเป็นต้องสนใจภาษาที่สคริปต์พื้นฐานเขียนไว้
the_velour_fog

1
ขึ้นอยู่กับสิ่งที่คุณสามารถมี env, rc, conf ฯลฯ
123

1
@ 123 มันขึ้นอยู่กับบางครั้งเมื่อคุณสร้างสิ่งที่มีประโยชน์และใส่เข้าไป$PATHคุณจะใช้ตลอดเวลาดังนั้นมันก็เหมือน, psและls, curlและคำสั่งอื่น ๆ ทั้งหมด, จากนั้นคุณก็เริ่มสร้างฟังก์ชั่นการทำให้เชลล์สมบูรณ์รอบ ๆ ฉันพบ มันตกลงที่จะวางส่วนขยาย แต่ใช่เมื่อคุณมีการจัดหาสคริปต์เปลือกที่ไม่ได้ปฏิบัติการด้วยตัวเองฉันจะไม่พวกเขาและฉันจะชื่อพวกเขาchmod +x script.shฉันยังมักจะกำหนดนามสกุลอย่างหมดจดเพราะถ้าฉันไม่ฉันจะไม่ได้รับการเน้นไวยากรณ์ในการแก้ไขของฉัน
the_velour_fog

5
ไม่มีการประชุม หากคุณอยู่ใน บริษัท หรือหากคุณกำลังทำงานร่วมกันในโครงการแบ่งปัน (เช่นโอเพนซอร์ส) คุณอาจมีมาตรฐานท้องถิ่นเพื่อให้สอดคล้องกับ แต่ไม่มีการประชุมแบบพฤตินัย
Stephen Harris

1
คำว่า"การประชุม" (หมายถึง # 2) คือสิ่งที่อาจนำไปสู่คำตอบ "ตามความคิดเห็น" ข้อมูลจำเพาะกลุ่มที่เปิดสำหรับแหล่งที่มาไม่ได้บังคับใช้มาตรฐานการตั้งชื่อใด ๆ
Jeff Schaller

คำตอบ:


18

ฉันจะใช้.sh(สำหรับไฟล์ในshภาษาPOSIX สำหรับไฟล์ที่.bashไม่รองรับ sh bashนั่นคือส่วนขยายระบุภาษาที่เขียนด้วยสคริปต์) สำหรับไฟล์ที่ต้องการให้มีแหล่งที่มา (หรือโดยทั่วไปไม่ได้ตั้งใจจะเรียกใช้) และไม่มีส่วนขยายสำหรับไฟล์ที่ต้องการดำเนินการ

คุณยังสามารถเพิ่ม:

#! /bin/echo Please-source

เธอปังดังนั้นเมื่อดำเนินการโดยไม่ตั้งใจ (แม้ว่าฉันคาดว่าไฟล์เหล่านั้นไม่ควรได้รับอนุญาตการดำเนินการซึ่งจะป้องกันการดำเนินการแล้ว) คุณจะได้รับการแจ้งเตือนว่าควรจะมีแหล่งที่มาแทน


คุณยังสามารถออกได้หากสคริปต์ไม่ได้มา ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski

4

ในกรณีของไฟล์ต้นฉบับฉันคิดว่าวิธีที่ดีที่สุดคือ. config สำหรับไฟล์ที่กำหนดค่าสคริปต์และ. shlib หรือ. shlib สำหรับไฟล์ที่มีฟังก์ชั่นหรืออุปกรณ์อื่น ๆ

หากคุณต้องการป้องกันไม่ให้สคริปต์รันด้วยเชลล์ที่ผิดและ hashbang นั้นไม่เพียงพอสำหรับคุณคุณสามารถใช้สิ่งนี้:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
หากคุณกำลังจะใช้ลินุกซ์เฉพาะ/proc/$$/exeคุณเช่นกันอาจจะทำมันเป็นแต่ที่นี่ผมเพียงแค่ต้องการใช้:case $(readlink "/proc/$$/exe") in */bash)... if [ -z "$BASH_VERSION" ]( echoควรเป็นecho >&2) (ฉันชอบคุณ.confหรือ.shlibs(แต่สำหรับไฟล์ sh) ส่วนขยายแม้ว่ามันอาจจะไม่ช่วยเน้นข้อความเน้นข้อความที่อาศัยส่วนขยาย)
Stéphane Chazelas

ใช่ฉันเห็น. shlibs นี้ในโปรแกรมบางประเภทที่ฉัน donwload แต่ฉันจำไม่ได้ดังนั้นฉันจึงเริ่มใช้มัน ขอบคุณมากสำหรับคำแนะนำฉันจะแก้ไขคำถามด้วย readlink เวอร์ชันที่สวยงามยิ่งขึ้น ;-)
Luciano Andress Martini

@ StéphaneChazelasการเน้นไวยากรณ์อาจถูกทริกเกอร์ผ่าน meta-data ในไฟล์ของตัวเอง (atleast สำหรับ Emacs และ Vim) ดังนั้นตัวเลือกของนามสกุลไฟล์จะไม่เกี่ยวข้องในส่วนนั้น
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.