Devo salvare i miei script con l'estensione .sh?


66

Ho alcuni script funzionali e voglio copiarli, /usr/binli voglio usare come normali comandi di terminale. È una buona pratica usarli con l' .shestensione o posso salvarli senza estensione?


6
Inoltre, se desideri che tali script siano disponibili per tutti gli utenti, /usr/local/binpotrebbe essere una scelta migliore.
Salem,

6
@Salem /usr/bine /usr/local/bindovrebbero essere entrambi disponibili per tutti gli utenti, ma /usr/local/binè meglio per gli eseguibili che non fanno parte dei pacchetti.
Gerrit,

L'unico vantaggio che ho visto è che editor come vim o nano sanno come evidenziare fin dall'inizio, e questo è tutto.
rath

1
@rath Ottengo l'evidenziazione della sintassi senza l'estensione se ho lo shebang impostato su #!/usr/bin/env basho #!/bin/bash.
Sparhawk,

@Sparhawk In effetti, ma spesso lo dimentico finché non provo a eseguire la sceneggiatura;)
rath

Risposte:


71

No, non è una buona pratica, dovresti conservare i tuoi script senza estensione. Nota che gli script che fanno parte dei pacchetti non hanno un'estensione .sh , cioè update-grub , non update-grub.sh . Se non sei ancora convinto, tieni presente che la Guida allo stile di Google Shell dice:

Gli eseguibili non dovrebbero avere estensione (fortemente preferita) o estensione .sh. Le librerie devono avere un'estensione .sh e non devono essere eseguibili.

PS Non devi inserire la tua sceneggiatura /bin. Puoi creare una directory ~/bine inserire lì il tuo script. La directory ~/binè inclusa $PATHper impostazione predefinita, quindi gli script inseriti possono essere eseguiti come qualsiasi altro comando shell.


4
"Directory ~ / bin è inclusa $PATHper impostazione predefinita" - Da quando? Comunque, ~/.local/binè probabilmente una scelta migliore in quanto è uno standard.
nyuszika7h,

1
Intendi "Le librerie devono avere un'estensione .so", giusto? Non sh.
Keith Wolters,

3
@KeithWolters prima, non io, ma Google. In secondo luogo, .sh, non .so, stiamo parlando di script di shell, non di binari.

1
La guida di stile di Google è molto specifica per Google. Ad esempio, "Bash è l'unico linguaggio di script di shell consentito per gli eseguibili". Chiaramente una regola interna piuttosto che le migliori pratiche.
Paul Draper,

1
@ nyuszika7h controlla ~ / .profile ... inserisce $ HOME / bin nel tuo percorso se la directory esiste
Corey Goldberg

9

Seguo la raccomandazione di usare ~/binche viene automaticamente aggiunta alla tua $PATH, come ha detto Sergey . Oppure /usr/local/bin, che potrebbe già essere sul PATH. Però:

  • Lo stai facendo da solo. Usa tutto ciò con cui ti senti a tuo agio. In effetti, direi di mantenere l'estensione in modo che ti venga ricordato che è lo script che stai eseguendo, poiché -
  • Le estensioni non sono comuni in /usr/bin. Nel mio sistema, posso trovarne solo due:

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

    Quindi, se stai confezionando, lascia sicuramente fuori l'estensione.


2
~/binviene aggiunto $PATHautomaticamente se esiste, non è necessario aggiungerlo manualmente. Basta creare la directory, disconnettersi e riconnettersi.
Sergey,

5

Metti la seguente riga all'inizio del file:

#!/bin/bash

Quindi quel file sarà automaticamente digitare: Shell Script senza alcuna estensione!

Ricorda di dare il permesso di esecuzione al file.

Per mettere lo script in modo che possa essere eseguito con un comando diretto, visitare: Dove devo inserire il mio script in modo da poterlo eseguire con un comando diretto?


2
O anche solo #! / Bin / sh se non hai bisogno della shell bash completa.
flickerfly,

Molti sistemi operativi collegano / bin / sh e / bin / bash
Max Coplan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.