Je « m sur un kali Linux 64 bits.
Jai créé un script python qui prend 2 arguments pour démarrer. Je ne veux pas taper à chaque fois exactement les mêmes chemins ou rechercher dans lhistorique des commandes que jai utilisées dans le terminal. Jai donc décidé de créer un script simple qui appelle le script python avec ses arguments.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Cest exactement la même commande que jutiliserais dans le terminal. Cependant, jobtiens un message derreur lorsque jessaye dexécuter le fichier de script.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh a des droits exécutables.
Quest-ce qui ne va pas?
Réponse
Vous avez un espace au lieu dune barre oblique ici:
#! /bin bash
Doit être:
#! /bin/bash
ou simplement
#!/bin/bash
(le premier espace est facultatif). Le shebang (#!
) doit être suivi du chemin vers un exécutable , qui peut être suivi de un argument , par exemple,
#!/usr/bin/env sh
Dans ce cas /usr/bin/env
est lexécutable; voir man env
pour plus de détails.
Juste /bin
fait référence à un répertoire.
Commentaires
Réponse
Il est à noter que si le point de montage sur lequel réside votre script a lattribut « noexec », alors vous pouvez faire tout ce que vous voulez et cela ne fonctionnera toujours pas, mais invoquer linterpréteur avec le script comme argument fonctionnera (tant que qui à son tour nessaye pas dexécuter un autre script sur un montage noexec).
#!/bin/sh
(à la place de#!/bin/bash
) à moins que vous ne sachiez que vous utilisez des fonctionnalitésbash
.sh
que quand je sais que je ' m ne pas utiliser les fonctionnalités bash).which bash
est utile. Cela renvoie/bin/bash
. En haut de mon script Bash, jajoute#!/bin/bash
. Ensuite, lorsque je veux exécuter le script Bash, jentrebash foo.sh
. Ainsi,which sh
est utilisé de la même manière.sh foo.sh
/bin/sh
est autre chose que Bash et il y a des Bashismes inaperçus dans le script). Voir ici.