Dois-je sauvegarder mes scripts avec l'extension .sh?

66

J'ai des scripts fonctionnels et je veux les copier, /usr/binje veux les utiliser comme des commandes de terminal normales. Est-ce une bonne pratique de les utiliser avec l' .shextension ou puis-je les sauvegarder sans extension?

Patterson
la source
6
De même, si vous souhaitez que ces scripts soient disponibles pour tous les utilisateurs, cela /usr/local/binpeut être un meilleur choix.
Salem
6
@Salem /usr/binet /usr/local/bindevraient tous deux être disponibles à tous les utilisateurs, mais /usr/local/binest mieux pour executables qui ne font pas partie des paquets.
gerrit
Le seul avantage que j'ai constaté est que des éditeurs tels que vim ou nano savent mettre en évidence dès le début, et c'est à peu près tout.
Rath
1
@rath J'obtiens la coloration syntaxique sans l'extension si j'ai le shebang réglé sur #!/usr/bin/env bashou #!/bin/bash.
Sparhawk
@Sparhawk En effet , mais j'oublie souvent jusqu'à ce que je tente de lancer le script;)
Rath

Réponses:

71

Non, ce n'est pas une bonne pratique, vous devriez garder vos scripts sans extension. Notez que les scripts faisant partie de paquets n'ont pas d' extension .sh , c'est -à- dire update-grub , pas update-grub.sh . Si vous n'êtes toujours pas convaincu, sachez que Google Shell Style Guide indique:

Les exécutables ne doivent avoir aucune extension (fortement recommandée) ou une extension .sh. Les bibliothèques doivent avoir une extension .sh et ne doivent pas être exécutables.

PS Vous n’êtes pas obligé de mettre votre script /bin. Vous pouvez créer un répertoire ~/binet y placer votre script. Directory ~/binétant inclus $PATHpar défaut, les scripts qui y sont placés peuvent être exécutés comme toute autre commande shell.

Communauté
la source
4
"Répertoire ~ / bin est inclus $PATHpar défaut" - Depuis quand? Quoi qu’il en soit, ~/.local/binc’est probablement un meilleur choix car c’est une norme.
nyuszika7h
1
Vous voulez dire "Les bibliothèques doivent avoir une extension .so", non? Pas sh.
Keith Wolters
3
@ KeithWolters d'abord, pas moi, mais Google. Deuxièmement, .sh, pas .so, nous parlons de scripts shell, pas de binaires.
1
Le guide de style de Google est très spécifique à Google. Par exemple, "Bash est le seul langage de script shell autorisé pour les exécutables". Clairement une règle interne plutôt que des meilleures pratiques.
Paul Draper
1
@ nyuszika7h consultez ~ / .profile ... il insère $ HOME / bin dans votre chemin si le répertoire existe
Corey Goldberg
9

J'appuie la recommandation d'utilisation ~/binqui s'ajoute automatiquement à votre $PATH, comme l'a dit Sergey . Ou /usr/local/bin, qui peut déjà être sur le PATH. Pourtant:

  • Vous faites cela pour vous-même. Utilisez ce que vous sentez à l'aise. En effet, je dirais de garder l’extension pour vous rappeler que c’est votre script que vous exécutez, car -
  • Les extensions sont rares dans /usr/bin. Dans mon système, je ne peux en trouver que deux:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh
    

    Donc, si vous emballez, laissez définitivement de côté l'extension.

muru
la source
2
~/binest ajouté à $PATHautomatiquement s'il existe, pas besoin de l'ajouter manuellement. Créez simplement le répertoire, déconnectez-vous et reconnectez-vous.
Sergey
5

Il suffit de mettre la ligne suivante en haut du fichier:

#!/bin/bash

Donc, ce fichier sera automatiquement tapez: Shell Script sans aucune extension!

N'oubliez pas de donner l'autorisation d'exécution pour le fichier.

Pour mettre le script en tant que tel qui peut être exécuté par commande directe, visitez: Où dois-je placer mon script afin que je puisse l'exécuter par une commande directe?

Pandya
la source
2
Ou même simplement #! / Bin / sh si vous n'avez pas besoin du shell bash complet.
papillotement
De nombreux systèmes d’exploitation relient / bin / sh et / bin / bash
Max Coplan