(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.
.bash
extensión. Además, es política de Debian tener scripts en paquetes que aterrizan en una de lasbin
carpetas para no tener extensiones.Respuestas:
Si no utiliza un intérprete explícitamente, el intérprete que se invoca está determinado por el
shebang
utilizado 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
.py
extensión del script bash no lo convierte en un script python.Siempre es un
bash
guió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 scriptname
para averiguar cuál es el archivo si quiero saber eso.Entonces, si desea que se ejecute su script
bash
, úselo#!/bin/bash
como la primera línea.fuente
.sh
extensió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.sh
extensión, sería confuso).#!/usr/bin/env bash
para portabilidad, discutido aquí stackoverflow.com/a/10383546/54964