Gunakan ekstensi .sh atau .bash untuk skrip bash?

36

(Lihat Menggunakan #! / Bin / sh atau #! / Bin / bash untuk kompatibilitas Ubuntu-OSX dan kemudahan penggunaan & POSIX )

Jika saya ingin skrip saya menggunakan bash shell, apakah menggunakan ekstensi .bash sebenarnya memanggil bash atau apakah itu tergantung pada konfigurasi sistem / baris shebang pertama. Jika keduanya berlaku tetapi berbeda, mana yang akan didahulukan?

Saya tidak yakin apakah akan mengakhiri skrip saya dengan .sh hanya untuk menunjukkan "skrip shell" dan kemudian memiliki baris pertama pilih bash shell (misalnya #!/usr/bin/env bash) atau apakah hanya akan mengakhirinya dengan .bash (serta pengaturan baris 1) ). Saya ingin bash dipanggil.

Michael Durrant
sumber
3
Saya tidak berpikir saya pernah melihat .bashekstensi. Selain itu, kebijakan Debian untuk membuat skrip dalam paket yang masuk ke salah satu binfolder tidak memiliki ekstensi.
muru

Jawaban:

19

tidak menggunakan ekstensi .bash sebenarnya memanggil bash atau apakah itu tergantung pada konfigurasi sistem / baris shebang pertama.

Jika Anda tidak menggunakan penerjemah secara eksplisit, maka penerjemah yang dipanggil ditentukan oleh yang shebangdigunakan dalam skrip. Jika Anda menggunakan juru bahasa secara khusus maka juru bahasa tersebut tidak peduli ekstensi apa yang Anda berikan untuk naskah Anda. Namun, ada ekstensi untuk membuatnya sangat jelas bagi orang lain jenis skrip itu.

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

Lihat, .pyekstensi ke skrip bash tidak menjadikannya skrip python.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

Itu selalu sebuah bashnaskah.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script
Sree
sumber
23

Penamaan skrip tidak ada hubungannya dengan bagaimana skrip dijalankan.

Baris shebang mendefinisikan interpreter apa yang digunakan untuk menjalankan skrip.

Saya pribadi tidak peduli jika sebuah skrip adalah sh, bash, perl, apa pun jadi saya sebut saja untuk apa fungsinya; Saya menemukan menambahkan ekstensi yang berlebihan. Saya akan lakukan file scriptnameuntuk mengetahui file apa itu jika saya ingin tahu itu.

Jadi, jika Anda ingin skrip Anda dijalankan bash, gunakan #!/bin/bashsebagai baris pertama.

Wurtel
sumber
4
Juga, jika pilihan implementasi untuk skrip pernah berubah (katakanlah ditulis ulang dengan Python, Perl, C ...), tidak memiliki .shekstensi gaya berarti tidak perlu mengubah nama itu. (Diakui tidak ada yang mencegah program C menghasilkan biner dengan .shekstensi, itu hanya akan membingungkan.)
Stephen Kitt
2
Gunakan #!/usr/bin/env bashuntuk portabilitas, dibahas di sini stackoverflow.com/a/10383546/54964
Léo Léopold Hertz 준영
4
@wurtel (komentar terlambat, oke?) Menambahkan ekstensi imho jauh dari berlebihan. Sebagian besar editor mendukung penyorotan sintaksis berdasarkan ekstensi, ditambah lagi masuk akal untuk memiliki visibilitas langsung dari jenis file. Kejelasan dan kesiapan sangat penting.
RolfBly
@RolfBly: Editor yang saya gunakan mengenali shebang dan menyediakan penyorotan sintaksis. Kejelasan berguna, tetapi sebagian besar waktu kita ingin mengeksekusi perintah dan itu baik jika saya harus mengetik lebih sedikit dan jika saya tidak harus mengingat bahasa implementasinya.
Hontvári Levente