Dans cet article, nous allons voir comment bien choisir un shebang.

Cf Shebang sur Wikipedia

Le shebang, représenté par #!, est un en-tête d’un fichier texte qui indique au système d’exploitation (de type Unix) que ce fichier est un script (ensemble de commandes) et non un fichier binaire ; sur la même ligne est précisé l’interpréteur permettant d’exécuter ce script.

J’ai des petits soucis dans mon script

J’utilise deux ordinateurs: un sous Linux et un sous MacOS et j’ai un script qui fonctionne sous Linux et pas sur MacOS.

Voici L’extrait intéressant

#!/bin/bash

declare -A Array

L’erreur est la suivante sur MacOS : declare: -A: invalid option

Cette fonctionnalité (associative array) n’est disponible qu’à partir de bash 4.0

Et pourtant, quand je regarde ma version de bash, c’est ok.

❯ bash --version
GNU bash, version 5.2.21(1)-release (x86_64-apple-darwin21.6.0)

Mais qu’est ce qui se passe ?

Creusons

Regardons s’il existe plusieurs versions de bash installées.

❯ which -a bash
/usr/local/bin/bash
/bin/bash

Et ben oui !

Regardons les versions

❯ /usr/local/bin/bash --version
GNU bash, version 5.2.21(1)-release (x86_64-apple-darwin21.6.0)
❯ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin21)

Le problème s’éclaire: la version de bash utilisé par le script n’est pas celle de mon PATH et n’est pas la plus récente.

La solution

On peut utiliser la commande env au lieu d’un interpréteur de commandes pour chercher celui-ci dans le PATH

#!/usr/bin/env bash