Je me demandais quel était le besoin de mettre des commandes exécutables dans un .sh
fichier pour créer un seul script, car je peux faire la même chose en mettant les commandes dans un .txt
fichier et en le rendant exécutable à l'aide chmod
.
Je suppose que cela peut être fait avec n'importe quelle extension de fichier. Donc, je suis assez confus quant à la nécessité d'une .sh
extension. Toute aide serait très appréciée.
.txt
.txt suffix.txt, you're.txt not.txt aid.txt yourself.txt (or.txt anybody.txt else .txt) Understanding.txt what.txt each.txt file.txt is.txt there.txt for.txt.Réponses:
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
file
commande, elle vous montre les informations qu'elle peut trouver sur un type de fichier à partir de son contenu.Pour un script exécutable, le système attend un soi-disant "shebang" dans la première ligne, qui ressemble par exemple à
et indique le programme à exécuter comme interprète avec le fichier de script comme argument. Si vous exécutez un fichier texte sans un tel shebang, il utilisera votre shell par défaut, c'est-à-dire Bash pour essayer de l'interpréter.
Ainsi, sur les systèmes Unix / Linux, les extensions de nom de fichier sont principalement un indice (mais aucune garantie) permettant à l'utilisateur humain de reconnaître rapidement ce à quoi s'attendre qu'un fichier spécifique contienne. C'est aussi une convention qui peut aider, par exemple, à trouver des fichiers plus rapidement.
Notez cependant qu'il existe certaines exceptions, où le nom et l'extension sont importants (par exemple, certains fichiers de configuration système qui doivent suivre une convention de dénomination, ou de nombreux visualiseurs et éditeurs d'images nécessitent également l'extension pour indiquer le type de fichier).
Vous pouvez également jeter un œil à Les extensions de fichier ont-elles une utilité (pour le système d'exploitation)?
la source
Il n'existe pas de fichier "extension" ou "type" dans un nom de fichier UNIX / Linux.
Comme d'autres l'ont souligné, le "type" peut être trouvé en utilisant la commande file en supposant que la magie appropriée est disponible sur votre système. Les noms de fichiers UNIX / Linux peuvent normalement contenir n'importe quel caractère disponible, mais il est souvent utile d'utiliser une certaine forme de convention pour le nom afin que les humains 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 de fichier pour indiquer un fichier temporaire plutôt que d'utiliser quelque chose comme la chaîne ".tmp" à la fin du nom de fichier. Le résultat est le même, un fichier contenant des données qui ne sont peut-être nécessaires que pour une courte période mais le nom ne nécessite pas d'avoir un "." ni la chaîne "tmp". Cela peut parfois présenter 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 décider une autre même en utilisant ".tmp" comme convention d'un nom pour un fichier temporaire.
Donc, ma réponse est qu'il n'existe pas d'extension de fichier UNIX / Linux simplement 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.
la source
"."
sont censés être pointés par le shell (ils ne peuvent pas s'exécuter de manière significative dans un sous-shell). De même, je désactive la convention par défaut "dot initial = fichier caché" dans mes alias / scripts qui utilisentls
pour que je puisse voir tous les fichiers, y compris ceux "cachés". De même sous Windows, je désactive le paramètre "masquer les extensions de fichier".