web-dev-qa-db-fra.com

Pourquoi ne pas créer un fichier .txt exécutable au lieu d'un fichier .sh pour exécuter des scripts?

Je me demandais quelle était la nécessité de placer des commandes exécutables dans un fichier .sh pour créer un seul script, car je peux faire de même en plaçant les commandes dans un fichier .txt et en le rendant exécutable à l'aide de chmod.

Je suppose que cela peut être fait avec n'importe laquelle des extensions de fichier. Donc, je suis assez confus quant à la nécessité de l'extension .sh. Toute aide serait très appréciée.

18

Il n'est pas nécessaire que l'extension de fichier corresponde à quelque chose de spécifique, comme vous l'avez correctement découvert.

Sur les systèmes de type Unix, les types de fichiers sont généralement dérivés du contenu du fichier (c'est-à-dire du "nombre magique" ou d'autres structures caractéristiques dans les premiers octets) et non de leur nom. Vous pouvez également omettre complètement l'extension, ce qui est souvent fait pour les exécutables.

Vérifiez la commande file, elle affiche les informations qu’il peut trouver sur un type de fichier à partir de son contenu.

Pour un script exécutable, le système attend un "Shebang" dans la première ligne, qui ressemble par exemple à. comme

#!/usr/bin/env python3

et indique quel programme doit être exécuté en tant qu'interprète avec le fichier de script en tant qu'argument. Si vous exécutez un fichier texte sans Shebang, il utilisera votre shell par défaut, à savoir Bash, pour essayer de l’interpréter.

Ainsi, sur les systèmes Unix/Linux, les extensions de nom de fichier sont essentiellement un indice (mais aucune garantie) permettant à l’utilisateur humain de reconnaître rapidement ce qu’il faut attendre d’un fichier spécifique. C’est aussi une convention qui peut aider, par exemple, trouver des fichiers plus rapidement.

Notez qu'il existe cependant quelques exceptions où le nom et l'extension sont importants (par exemple, certains fichiers de configuration système qui doivent respecter une convention de dénomination, ou de nombreux visualiseurs d'images et éditeurs nécessitent également l'extension pour indiquer le type de fichier).

Vous pouvez aussi jeter un oeil sur Les extensions de fichier ont-elles une utilité (pour le système d'exploitation)?

47
Byte Commander

Un fichier "extension" ou "type" n'existe pas dans un nom de fichier UNIX/Linux.

Comme d'autres l'ont fait remarquer, le "type" peut être trouvé en utilisant la commande file en supposant que la magie correspondante est disponible sur votre système. Les noms de fichier UNIX/Linux peuvent normalement contenir n’importe quel caractère disponible, mais il est souvent utile d’utiliser une forme de convention pour le nom afin que les utilisateurs et les machines puissent juger du contenu (et donc de l’utilisation du contenu).

Par exemple, j'utilise souvent une virgule comme premier caractère du nom du fichier pour indiquer un fichier temporaire plutôt que d'utiliser quelque chose comme la chaîne ".tmp" à la fin du nom du fichier. Le résultat est identique, un fichier contenant des données qui ne sont nécessaires que pendant une courte période, mais dont le nom ne nécessite pas de "." en son sein ni la chaîne "tmp". Cela peut parfois avoir des avantages, par exemple. lors de l'analyse d'une liste de noms de fichiers. Mais c'est MA convention et quelqu'un d'autre peut en choisir une autre, même en utilisant ".tmp" comme convention pour un nom de fichier temporaire.

Je vous réponds donc qu’une extension de fichier UNIX/Linux n’existe pas, elle se limite à un ensemble de conventions qui ressemblent généralement aux extensions de fichier utilisées dans d’autres systèmes d’exploitation et leurs systèmes de fichiers.

3
PJF