Obviamente, hay algunas diferencias entre los archivos ejecutables en los bindirectorios y los archivos "fuente" editables.
- Para los archivos de origen, es útil tener un sufijo para que pueda ver qué es qué y para ayudar a algunas herramientas menos inteligentes que no pueden escanear la
#!línea.
- Para los módulos, solo los usan un conjunto relacionado de programas, todos los cuales usan el mismo intérprete (o ningún intérprete), y es convencional incluirlos
.pm, .sho .soen tales casos.
- Para los programas ejecutables, su nombre es parte del "contrato de programación" por el cual los usuarios y otros scripts lo invocan. Es importante que el nombre no cambie incluso si la implementación lo hace; así que obviamente el nombre del archivo no debería tener un sufijo
En el caso de un programa compilado, la diferencia entre "fuente" y "ejecutable" es obvia: una contiene código fuente, la otra contiene lenguaje de máquina o código de bytes interpretado. En el caso de un script, no hay una diferencia obvia, pero el makecomando mantiene una separación teórica entre el "código fuente de un script" y la "versión ejecutable de un script": su "compilador" predeterminado para "shell script" es simplemente cp.
Recomendaría mantener un $HOME/sourcedirectorio separado y:
- mantener un enlace simbólico, como el realizado por
ln -s ../source/foo.sh $HOME/bin/foo; o
- copiarlos manualmente después de hacer cambios (y probarlos), usando
install -m 755 foo.sh ../bin/foo; o
- usando una
Makefileregla para realizar una comprobación de sintaxis antes de copiar el archivo de origen desde $HOME/sourcedentro$HOME/bin
Nota al pie: un módulo de script de shell solo puede ser utilizado por otro script de shell y modifica el contexto interno de ese script utilizando los comandos .o sourcelos comandos integrados. Esto es diferente de un script ejecutable, que (como cualquier programa) se ejecuta como un proceso separado y no puede modificar su proceso padre. Como una convención aproximada, los módulos entran /usr/lib/name_of_program/name_of_module.shmientras que los comandos entran /usr/bin/name_of_command(sin ningún sufijo).