(Consulte Use #! / Bin / sh o #! / Bin / bash para ver la compatibilidad y la facilidad de uso de Ubuntu-OSX y POSIX )
Si quiero que mis scripts utilicen el shell bash, ¿el uso de la extensión .bash realmente invoca bash o depende de la configuración del sistema / primera línea shebang? Si ambos estuvieran vigentes pero fueran diferentes, ¿cuál tendría prioridad?
No estoy seguro de si terminar mis scripts con .sh para indicar simplemente "script de shell" y luego hacer que la primera línea seleccione el shell bash (por ejemplo #!/usr/bin/env bash) o si simplemente terminarlos con .bash (así como la configuración de la línea 1) ) Quiero que se invoque a bash.

.bashextensión. Además, es política de Debian tener scripts en paquetes que aterrizan en una de lasbincarpetas para no tener extensiones.Respuestas:
Si no utiliza un intérprete explícitamente, el intérprete que se invoca está determinado por el
shebangutilizado en el script. Si utiliza un intérprete específicamente, al intérprete no le importa qué extensión le dé a su guión. Sin embargo, la extensión existe para que sea muy obvio para otros qué tipo de script es.Vea, la
.pyextensión del script bash no lo convierte en un script python.Siempre es un
bashguión.fuente
El nombramiento del script no tiene nada que ver con cómo se ejecuta.
La línea shebang define qué intérprete se usa para ejecutar el script.
Personalmente no me importa si un script es sh, bash, perl, lo que sea, así que solo lo nombro por lo que hace; Encuentro agregar una extensión redundante. Haré
file scriptnamepara averiguar cuál es el archivo si quiero saber eso.Entonces, si desea que se ejecute su script
bash, úselo#!/bin/bashcomo la primera línea.fuente
.shextensión de estilo significa que no hay necesidad de cambiarle el nombre. (Es cierto que no hay nada que impida que un programa C produzca un binario con una.shextensión, sería confuso).#!/usr/bin/env bashpara portabilidad, discutido aquí stackoverflow.com/a/10383546/54964