Dans mon .profile
, j'utilise le code suivant pour m'assurer que les alias et les fonctions liés à Bash ne proviennent que si le shell de connexion est en fait Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Je suis actuellement en train de mettre mes fichiers de configuration shell, mes scripts et mes fonctions sous contrôle de version. J'ai également récemment commencé le processus de suppression des bashismes occasionnels des scripts shell qui ne bénéficient pas des fonctionnalités spécifiques à Bash, par exemple, le remplacement function funcname()
par funcname()
.
Pour mon référentiel de fichiers shell, j'ai configuré un hook de pré-validation qui exécute l' checkbashisms
utilitaire à partir du paquet devscripts de Debian sur chaque sh
fichier du référentiel pour m'assurer que je n'introduis pas par inadvertance la syntaxe spécifique à Bash. Cependant, cela soulève une erreur pour mon .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Je me demandais s'il y avait un moyen de vérifier quel shell fonctionnait qui ne déclencherait pas d'avertissement checkbashisms
.
J'ai vérifié la liste des variables liées au shell répertoriées par POSIX dans l'espoir que l'une d'entre elles puisse afficher le shell actuel. J'ai également examiné les variables définies dans un shell Dash interactif mais, encore une fois, je n'ai pas réussi à trouver un candidat approprié.
Pour le moment, j'ai exclu .profile
d'être traité par checkbashisms
; c'est un petit fichier donc il n'est pas difficile de le vérifier manuellement. Cependant, après avoir étudié le problème, j'aimerais toujours savoir s'il existe une méthode compatible POSIX pour déterminer quel shell est en cours d'exécution (ou au moins une manière qui ne provoque pas checkbashisms
d'échec).
Contexte / clarification supplémentaire
L'une des raisons pour lesquelles je mets mes fichiers de configuration shell sous contrôle de version est de configurer régulièrement mon environnement sur tous les systèmes auxquels je me connecte actuellement: Cygwin, Ubuntu et CentOS (5 et 7, utilisant Active Directory pour l'utilisateur authentification). Je me connecte le plus souvent via X Windows / environnements de bureau et SSH pour les hôtes distants. Cependant, j'aimerais que ce soit à l'épreuve du temps et que je me fie le moins possible aux dépendances du système et à d'autres outils.
J'ai utilisé checkbashisms
comme un simple test de santé mentale automatisé pour la syntaxe de mes fichiers liés au shell. Ce n'est pas un outil parfait, par exemple, j'ai déjà appliqué un patch pour qu'il ne se plaint pas de l'utilisation de command -v
dans mes scripts. Pendant mes recherches, j'ai appris que le but réel du programme est d'assurer la conformité avec la politique Debian qui, si je comprends bien, est basée sur POSIX 2004 plutôt que 2008 (ou sa révision de 2013).
.bash_profile
qui source à la fois .profile
et (conditionnellement) .bashrc
.