Un estándar / convención oficial para una extensión de archivo para los scripts de shell a la fuente

11

Me preguntaba si existe una convención para las extensiones de tipo de archivo para los scripts de shell que desea obtener en lugar de ejecutar. Por ejemplo:

  1. Si quiero ejecutar este script en una subshell.

    ./script.sh 
  2. Si quiero recordar ejecutar este script desde el shell actual.

    . script.source 

¿Existe una convención (como POSIX por ejemplo) para un tipo de archivo en el segundo ejemplo? Algo como .sourceo .sourceme?


Actualizar

Esta pregunta no pregunta sobre ninguna opinión. Dije claramente que me gustaría saber si hay una extensión de archivo estandarizada para este tipo de scripts. Esta pregunta está aún menos basada en la opinión que esta pregunta bien recibida sobre un tema similar (¿ Usar extensión .sh o .bash para scripts de bash? ).

Mateusz Piotrowski
fuente
1
Algunas personas piensan que los scripts de shell que se pueden ejecutar un ejecutable (es decir, que comienzan con #!/bin/sho similares deben tener ninguna extensión, porque el usuario no debería tener que preocuparse por lo que el lenguaje del guión subyacente fue escrito en.
the_velour_fog
1
Depende de para qué sirve, puede tener env, rc, conf, etc.
123
1
@ 123 depende, a veces una vez que se construye algo eso es útil y lo puso en $PATH, se llega a utilizar todo el tiempo, por lo que su gusto, ps, ls, curly todos los otros comandos, entonces empiezan a funciones de completado de concha construir a su alrededor, encuentro Está bien dejar caer la extensión. Pero sí, cuando obtiene un script de shell, que no son ejecutables por sí mismos, no lo haría chmod +x, y los nombraría script.sh. También a menudo asigno una extensión simplemente porque si no lo hago, no obtendré resaltado de sintaxis en mi editor.
the_velour_fog
55
No hay convención. Si está en una empresa o si está colaborando en un proyecto compartido (por ejemplo, código abierto), es posible que tenga que cumplir con las normas locales, pero no existe una convención de facto.
Stephen Harris
1
La palabra "convención" (que significa # 2) es lo que probablemente conduce a respuestas "basadas en la opinión". La especificación de grupo abierto para la fuente no aplica ningún estándar de nomenclatura.
Jeff Schaller

Respuestas:

18

Yo usaría .sh(para archivos en el shlenguaje POSIX , .bashpara basharchivos no compatibles con sh , es decir, la extensión identifica el idioma en el que está escrito el script) para archivos destinados a ser originados (o más generalmente no destinados a ser ejecutados), y sin extensión para archivos que deben ejecutarse.

También puede agregar un:

#! /bin/echo Please-source

she-bang, de modo que cuando se ejecuta por error (aunque esperaría que a esos archivos no se les otorguen permisos de ejecución, lo que ya impediría la ejecución), recibe un aviso de que debe obtenerse en su lugar.

Stéphane Chazelas
fuente
También puede salir si el script no tiene origen ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski
4

En el caso de los archivos fuente, creo que la mejor manera es .conf para archivos que configuran su script y .shlib o .shlibs para archivos que tienen funciones u otras utilidades.

Si desea evitar que su script se ejecute con el shell incorrecto, y hashbang no es suficiente para usted, puede usar esto:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi
Luciano Andress Martini
fuente
1
Si usted va a utilizar la específica de Linux /proc/$$/exe, que también podría hacerlo como case $(readlink "/proc/$$/exe") in */bash)..., aunque en este caso, yo simplemente uso: if [ -z "$BASH_VERSION" ]. ( echodebería ser echo >&2). (Me agradas .confo .shlibs(pero para archivos sh) extensiones, aunque puede que no ayude a resaltadores de sintaxis que dependen de la extensión).
Stéphane Chazelas
Sí, veo este .shlibs, en algún tipo de programa que no descargo, pero no lo recuerdo, así que comencé a usar esto. Muchas gracias por el consejo, editaré la pregunta con la versión readlink mucho más hermosa. ;-)
Luciano Andress Martini
@ StéphaneChazelas El resaltado de sintaxis puede activarse a través de metadatos en los propios archivos (al menos para Emacs y Vim), por lo que la elección de la extensión del nombre de archivo es irrelevante a ese respecto.
Kusalananda