Standar / konvensi resmi untuk ekstensi file untuk skrip shell ke sumber

11

Saya bertanya-tanya apakah ada konvensi untuk ekstensi jenis file untuk skrip shell yang ingin Anda sumber alih-alih dijalankan. Sebagai contoh:

  1. Jika saya ingin menjalankan skrip ini dalam subkulit.

    ./script.sh 
  2. Jika saya ingin ingat untuk menjalankan skrip ini dari shell saat ini.

    . script.source 

Apakah ada konvensi (seperti POSIX misalnya) untuk tipe file dalam contoh kedua? Sesuatu seperti .sourceatau .sourceme?


Memperbarui

Pertanyaan ini tidak menanyakan pendapat apa pun. Saya dengan jelas menyatakan bahwa saya ingin tahu apakah ada ekstensi file standar untuk skrip semacam ini. Pertanyaan ini bahkan lebih tidak berdasar pendapat daripada pertanyaan yang diterima dengan baik pada masalah yang sama ( Gunakan ekstensi .sh atau .bash untuk skrip bash? ).

Mateusz Piotrowski
sumber
1
Beberapa orang berpikir bahwa skrip shell yang dapat menjalankan file yang dapat dieksekusi (yaitu mereka mulai dengan #!/bin/shatau serupa tidak boleh memiliki ekstensi, karena pengguna tidak perlu peduli tentang bahasa apa yang dituliskan skrip yang mendasarinya.
the_velour_fog
1
Tergantung untuk apa itu, Anda dapat memiliki env, rc, conf dll
123
1
@ 123 itu tergantung, kadang-kadang setelah Anda membangun thats di sesuatu yang berguna dan memasukkannya ke dalam $PATH, Anda datang menggunakan semua waktu, jadi nya seperti, ps, ls, curldan semua perintah lainnya, maka Anda mulai fungsi selesai membangun shell di sekitarnya, saya menemukan tidak apa-apa untuk menjatuhkan ekstensi. Tapi ya, ketika Anda mencari skrip shell, yang tidak dapat dieksekusi sendiri, saya tidak akan melakukannya chmod +x, dan saya akan menamainya script.sh. juga saya sering menetapkan ekstensi murni karena jika tidak saya tidak akan mendapatkan sorotan sintaks pada editor saya.
the_velour_fog
5
Tidak ada konvensi. Jika Anda berada di perusahaan atau jika Anda berkolaborasi dalam proyek berbagi (misalnya opensource) maka Anda mungkin memiliki standar lokal untuk menyesuaikan, tetapi tidak ada konvensi de facto.
Stephen Harris
1
Kata "konvensi" (artinya # 2) adalah apa yang mungkin mengarah pada jawaban "berdasarkan pendapat". The terbuka kelompok spec untuk sumber tidak menerapkan standar penamaan.
Jeff Schaller

Jawaban:

18

Saya akan menggunakan .sh(untuk file dalam shbahasa POSIX , .bashuntuk bashfile yang tidak kompatibel dengan sh , yang merupakan ekstensi mengidentifikasi bahasa tempat script ditulis) untuk file yang dimaksudkan untuk diambil (atau lebih umum tidak dimaksudkan untuk dieksekusi), dan tidak ada ekstensi untuk file yang dimaksudkan untuk dieksekusi.

Anda juga dapat menambahkan:

#! /bin/echo Please-source

she-bang, sehingga ketika dieksekusi secara tidak sengaja (meskipun saya berharap file-file itu tidak boleh diberikan izin eksekusi, yang sudah akan mencegah eksekusi), Anda mendapatkan pemberitahuan bahwa itu harus bersumber sebagai gantinya.

Stéphane Chazelas
sumber
Anda juga dapat keluar jika skrip tidak bersumber ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski
4

Dalam hal file sumber, saya pikir cara terbaik adalah .conf untuk file yang mengkonfigurasi skrip Anda dan .shlib atau .shlibs untuk file yang memiliki fungsi atau utilitas lain.

Jika Anda ingin mencegah skrip Anda berjalan dengan shell yang salah, dan hashbang tidak cukup untuk Anda, Anda dapat menggunakan ini:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi
Luciano Andress Martini
sumber
1
Jika Anda akan menggunakan Linux-spesifik /proc/$$/exe, Anda mungkin juga melakukannya sebagai case $(readlink "/proc/$$/exe") in */bash)..., meskipun di sini, saya akan hanya menggunakan: if [ -z "$BASH_VERSION" ]. ( echoseharusnya echo >&2). (Saya suka Anda .confatau .shlibs(tetapi untuk file sh) ekstensi meskipun itu mungkin tidak membantu sintaksis yang bergantung pada ekstensi).
Stéphane Chazelas
Ya saya melihat ini .shlibs, dalam beberapa jenis program yang saya donwload, tetapi saya tidak ingat, jadi saya mulai menggunakan ini. Terima kasih banyak atas tipnya, saya akan mengedit pertanyaan dengan versi readlink yang jauh lebih indah. ;-)
Luciano Andress Martini
@ StéphaneChazelas Syntax highlighting dapat dipicu melalui meta-data dalam file itu sendiri (minimal untuk Emacs dan Vim), sehingga pilihan ekstensi nama file tidak relevan dalam hal itu.
Kusalananda