J'ai un script bash et il nécessite bash.
Une autre personne essaie de l'exécuter avec
sh script_name.sh
Et cela échoue car sh est le lien symbolique vers dash dans sa distribution.
$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Aug 25 16:06 /bin/sh -> dash
J'ai une idée pour utiliser le script wrapper:
#!/bin/sh
bash script_name.sh
Le but est d'exécuter le script .sh par sh avec bash dans un système ayant un lien symbolique vers dash.
Eh bien, en général, vous utilisez Shebang pour dire au shell d'utiliser l'interpréteur correct:
#!/bin/bash
# your script here
Vous devez définir le script pour qu'il soit exécutable:
chmod +x my_script.sh
Et laissez l'utilisateur le démarrer avec:
./my_script.sh
Cela semble simple que d'utiliser un script wrapper.
Vous pouvez utiliser jbr test pour exécuter votre script avec bash même si l'utilisateur utilise sh/dash ou tout interpréteur sh:
#!/bin/bash
if [ -z "$BASH_VERSION" ]
then
exec bash "$0" "$@"
fi
# Your script here
De cette façon, cela fonctionne correctement avec:
sh ./my_script.sh
# or
bash ./my_script.sh
# or
./my_script.sh
Dans votre script avant toute autre chose, vous pouvez faire quelque chose comme:
if [ "$BASH" != "/bin/bash" ]; then
echo "Please do ./$0"
exit 1
fi
ou la manière plus générale utilise $BASH_VERSION
:
if [ -z "$BASH_VERSION" ]; then
echo "Please do ./$0"
exit 1
fi