web-dev-qa-db-fra.com

Exécuter le script bash avec sh

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.

16
Lemon Tree

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
31
neuro

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
4
jbr