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.shque quand je sais que je ' m ne pas utiliser les fonctionnalités bash).which bashest 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 shest utilisé de la même manière.sh foo.sh/bin/shest autre chose que Bash et il y a des Bashismes inaperçus dans le script). Voir ici.