Utilizzare l'estensione .sh o .bash per gli script bash?


36

(Vedi Usa #! / Bin / sh o #! / Bin / bash per compatibilità Ubuntu-OSX e facilità d'uso e POSIX )

Se voglio che i miei script utilizzino la shell bash, l'uso dell'estensione .bash invoca effettivamente bash o dipende dalla configurazione del sistema / prima riga shebang. Se entrambi fossero attivi ma diversi, quale avrebbe la precedenza?

Non sono sicuro se terminare i miei script con .sh per indicare solo "shell script" e quindi fare in modo che la prima riga selezioni la shell bash (ad esempio #!/usr/bin/env bash) o se terminarli con .bash (così come l'impostazione della linea 1 ). Voglio che bash sia invocato.


3
Non credo di aver mai visto .bashun'estensione. Inoltre, è politica Debian avere script nei pacchetti che finiscono in una delle bincartelle per non avere estensioni.
muru,

Risposte:


19

l'uso dell'estensione .bash invoca effettivamente bash o dipende dalla configurazione del sistema / prima riga shebang.

Se non si utilizza esplicitamente un interprete, l'interprete che viene invocato è determinato dall'uso shebangnello script. Se usi un interprete in modo specifico, allora all'interprete non importa quale estensione dai per il tuo script. Tuttavia, l'estensione esiste per rendere molto ovvio per gli altri che tipo di sceneggiatura è.

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

Vedi, l' .pyestensione dello script bash non lo rende uno script Python.

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

È sempre una bashsceneggiatura.

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

23

La denominazione dello script non ha nulla a che fare con il modo in cui viene eseguita.

La riga shebang definisce quale interprete viene utilizzato per eseguire lo script.

Personalmente non mi importa se una sceneggiatura è sh, bash, perl, qualunque cosa, quindi la chiamo semplicemente per quello che fa; Trovo ridondante l'aggiunta di un'estensione. Farò file scriptnameper scoprire qual è il file se voglio saperlo.

Quindi, se si desidera eseguire lo script bash, utilizzare #!/bin/bashcome prima riga.


4
Inoltre, se la scelta dell'implementazione per lo script cambia (diciamo che è stata riscritta in Python, Perl, C ...), non avere .shun'estensione in stile significa che non è necessario rinominarlo. (Devo ammettere che nulla impedisce a un programma C di produrre un file binario con .shun'estensione, sarebbe solo fonte di confusione.)
Stephen Kitt,

2
Utilizzare #!/usr/bin/env bashper la portabilità, discusso qui stackoverflow.com/a/10383546/54964
Léo Léopold Hertz

4
@wurtel (commento tardivo, ok?) L'aggiunta di un'estensione imho è tutt'altro che ridondante. La maggior parte degli editor supporta l'evidenziazione della sintassi in base all'estensione, inoltre ha senso avere visibilità immediata del tipo di file. Chiarezza e readabiity contano molto.
RolfBly,

@RolfBly: gli editor che utilizzo riconoscono lo shebang e forniscono l'evidenziazione della sintassi. La chiarezza è utile, ma il più delle volte vogliamo eseguire un comando ed è bene se devo digitare meno e se non devo ricordare il suo linguaggio di implementazione.
Hontvári Levente,
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.