Autorisation de script Bash refusée & Interpréteur incorrect

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

  • putain, idiot moi! Merci! Je nai ' vu que …
  • Vous voudrez peut-être prendre lhabitude dutiliser #!/bin/sh (à la place de #!/bin/bash) à moins que vous ne sachiez que vous utilisez des fonctionnalités bash.
  • @ G-Man Merci davoir nettoyé ceci un peu. WRT bash vs sh, je suivais juste le schéma de la question (même si ma tendance est de nutiliser sh que quand je sais que je ' m ne pas utiliser les fonctionnalités bash).
  • Dans le terminal Ubuntu, 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, jentre bash foo.sh. Ainsi, which sh est utilisé de la même manière. sh foo.sh
  • @ G-Man, dans le monde du travail, il y a un nombre malheureux de personnes qui ne ' t savoir s’ils utilisent les fonctionnalités de Bash ou non. Dans de nombreux cas, il est préférable de ' qu’un script ne s’exécute pas du tout (car Bash est spécifié dans le shebang mais est manquant) plutôt que d’exécuter et de faire quelque chose dinattendu (car /bin/sh est autre chose que Bash et il y a des Bashismes inaperçus dans le script). Voir ici.

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).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *