Do not use file name suffixes on executables
Lately have been thinking a little bit about the annoyance of seeing filename extensions on executables. (eg, “foo.sh” vs the more sensible “foo”) Discovered this lovely article: https://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful/
I’ll duplicate the bullet points here. Using filename suffixes is bad because:
- unnecessarily expose implementation detail (breaking encapsulation).
- uselessly and incompletely mimic detail from the #! line.
- capture insufficient detail to be useful at the system level (and aren’t used).
- clash with recommended Unix (and Linux) practice.
- add noise to the command-level API.
- are very commonly technically incorrect for the script.
- give incorrect impressions about the use of the files they adorn.
- aren’t validated even for what little info is present in them.
- interfere with switching scripting languages.
- interfere with changing scripting language versions.
- interfere with changing to presumably-faster compiled forms.
- encourage naïvely running scripts with the extension-implied interpreter.
- infect novice scripters with misinformation about Unix scripting.