Comme indiqué, bash
est généralement disponible dans l'installation par défaut pour de nombreuses distributions. Votre script n'atteindra pas la plus grande base d'utilisateurs en s'appuyant sur zsh
.
Une question importante à laquelle répondre avant de concevoir votre script est " Pourquoi est-il important dans quel shell un script est exécuté? "
Différents shells utilisent une syntaxe différente ou offrent des fonctions de shell supplémentaires qui peuvent ne pas être prises en charge par d'autres shells. Pour écrire un script pour le «monde général des utilisateurs finaux de linux», déterminez si votre script utilise une syntaxe ou des fonctions shell qui reposent sur un environnement shell particulier.
Par exemple, bash
shell prend en charge certaines extensions qui ne sont pas prises en charge par dash
, Bourne shell, ou tout ce qui /bin/sh
pointe sur le système de l'utilisateur.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Essayez d'exécuter echo {1..10}
avec /bin/sh
par rapport à /bin/bash
et vous obtiendrez une sortie très différente.
Il en va de même pour zsh
qui, tout en prenant en charge la plupart des bash
syntaxes, offre une extension et une syntaxe supplémentaires qui ne sont pas prises en charge par le bash
shell. Voir ces tableaux comparant des shells pour des exemples spécifiques.
Vous pouvez élargir votre base d'utilisateurs potentiels au-delà bash
en adhérant à des scripts qui fonctionnent lorsqu'ils sont appelés #!/bin/sh -u
. Cependant, cela soulève une autre question importante à se poser: " Qu'est-ce qui est sacrifié en échange d'une plus grande portabilité? "
Déterminez si les différences relatives aux problèmes de sécurité, aux fonctionnalités, à l'efficacité ou à tout autre élément que vous jugez prioritaire pour votre script valent le sacrifice. Il se peut que vous ne souhaitiez pas une large utilisation d'un script avec une vulnérabilité de sécurité connue simplement parce qu'il fonctionne dans plus d'environnements.
De nombreux scripts sont écrits pour bash
que la prise en charge de ces scripts soit utilisée comme critère lors de la comparaison des shells de commande . Beaucoup plus de personnes pourront exécuter votre script que s'il s'appuie sur zsh
ou sur toute autre syntaxe exclusive à un environnement shell.
Gardez également à l'esprit que vous n'avez finalement pas le contrôle sur la façon dont l'utilisateur exécute le script (également utile pour déboguer des scripts dans différents shells ):
N'oubliez pas que si vous utilisez un shell pour lire un script shell («sh scriptname»), au lieu de l'exécuter directement («./scriptname»), le shell traitera tous les commentaires au début du script shell comme des commentaires. En particulier, le commentaire qui spécifie l'interpréteur à utiliser lors de l'exécution du script («#! / Bin / sh -u») sera ignoré, de même que toutes les options répertoriées à côté de cet interpréteur.
Donc, le mieux que vous puissiez faire à ce sujet est de rendre vos scripts portables, tant qu'il n'y a pas de gros sacrifices à la façon dont il fonctionne.
Vous pouvez également voir les conventions de codage Bash - Débordement de pile .
zsh
peuvent être populaires tandis que dans d'autres (secteur bancaire), c'est pratiquement du jamais vu. Je pense que vous devriez donner beaucoup plus d'informations si vous avez besoin de conseils appropriés sur celui-ci.