Haruskah saya menyimpan skrip saya dengan ekstensi .sh?

66

Saya memiliki beberapa skrip fungsional dan saya ingin menyalin ke /usr/binsaya ingin menggunakannya sebagai perintah terminal normal. Apakah praktik yang baik untuk menggunakannya dengan .shekstensi atau dapatkah saya menyimpannya tanpa ekstensi?

Patterson
sumber
6
Juga jika Anda ingin skrip tersebut tersedia untuk semua pengguna, /usr/local/binmungkin merupakan pilihan yang lebih baik.
Salem
6
@Salem /usr/bindan /usr/local/binkeduanya harus tersedia untuk semua pengguna, tetapi /usr/local/binlebih baik untuk executable yang bukan bagian dari paket.
gerrit
Satu-satunya manfaat yang saya lihat adalah editor seperti vim atau nano tahu cara menyorot dari awal, dan hanya itu saja.
rath
1
@rath Saya mendapatkan highlight sintaksis tanpa ekstensi jika shebang saya atur ke #!/usr/bin/env bashatau #!/bin/bash.
Sparhawk
@Sparhawk Memang tapi saya sering lupa sampai saya mencoba menjalankan skrip;)
rath

Jawaban:

71

Tidak, ini bukan praktik yang baik, Anda harus menyimpan skrip Anda tanpa ekstensi. Perhatikan, skrip yang menjadi bagian dari paket tidak memiliki ekstensi .sh , yaitu pembaruan-grub , bukan pembaruan-grub.sh . Jika Anda masih tidak yakin, maka maklumi, bahwa Panduan Gaya Google Shell mengatakan:

Executables tidak boleh memiliki ekstensi (sangat disukai) atau ekstensi .sh. Perpustakaan harus memiliki ekstensi .sh dan tidak boleh dieksekusi.

PS Anda tidak harus memasukkan skrip Anda ke dalamnya /bin. Anda dapat membuat direktori ~/bindan meletakkan skrip Anda di sana. Direktori ~/bindimasukkan $PATHsecara default, jadi skrip yang diletakkan di sana dapat dijalankan seperti perintah shell lainnya.

Komunitas
sumber
4
"Direktori ~ / nampan dimasukkan $PATHsecara default" - Sejak kapan? Lagi pula, ~/.local/binmungkin ini pilihan yang lebih baik karena standar.
nyuszika7h
1
Maksud Anda "Perpustakaan harus memiliki ekstensi .so", bukan? Bukan sh.
Keith Wolters
3
@KeithWolters dulu, bukan saya, tapi Google. Kedua, .sh, bukan .so, kita berbicara tentang skrip shell, bukan binari.
1
Panduan gaya Google sangat spesifik untuk Google. Misalnya, "Bash adalah satu-satunya bahasa skrip shell yang diizinkan untuk dieksekusi." Jelas aturan internal daripada praktik terbaik.
Paul Draper
1
@ nyuszika7h periksa ~ / .profile ... ia memasukkan $ HOME / bin ke path Anda jika direktori ada
Corey Goldberg
9

Saya kedua rekomendasi untuk menggunakan ~/binyang secara otomatis ditambahkan ke Anda $PATH, seperti kata Sergey . Atau /usr/local/bin, yang mungkin sudah ada di PATH. Namun:

  • Anda melakukan ini untuk diri sendiri. Gunakan apa pun yang Anda merasa nyaman. Memang, saya akan mengatakan menyimpan ekstensi sehingga Anda akan diingatkan bahwa skrip Anda yang Anda jalankan, karena -
  • Ekstensi jarang ditemukan /usr/bin. Dalam sistem saya, saya hanya dapat menemukan dua:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    Jadi, jika Anda mengemas, pasti tinggalkan ekstensi.

muru
sumber
2
~/binditambahkan ke $PATHsecara otomatis jika ada, tidak perlu menambahkannya secara manual. Cukup buat direktori, keluar dan masuk kembali.
Sergey
5

Cukup letakkan baris berikut di atas file:

#!/bin/bash

Jadi-file itu akan secara otomatis mengetik: Shell Script tanpa ekstensi apa pun!

Ingatlah untuk memberikan izin eksekusi ke file.

Untuk meletakkan skrip sehingga-dapat dijalankan dengan perintah langsung, kunjungi: Di mana saya harus meletakkan skrip saya sehingga saya dapat menjalankannya dengan perintah langsung?

Pandya
sumber
2
Atau bahkan hanya #! / Bin / sh jika Anda tidak memerlukan bash shell lengkap.
flickerfly
Banyak OS yang terhubung / bin / sh dan / bin / bash
Max Coplan