Bash-Skript-Berechtigung verweigert & Fehlerhafter Interpreter

Ich bin auf einem 64-Bit-Kali-Linux.

Ich habe ein Python-Skript erstellt, für dessen Start zwei Argumente erforderlich sind. Ich möchte nicht jedes Mal genau dieselben Pfade oder Suchvorgänge im Verlauf der Befehle eingeben, die ich im Terminal verwendet habe. Also habe ich beschlossen, ein einfaches Skript zu erstellen, das das Python-Skript mit seinen Argumenten aufruft.

#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/ 

Es ist genau der gleiche Befehl, den ich im Terminal verwenden würde. Beim Versuch, die Skriptdatei auszuführen, wird jedoch eine Fehlermeldung angezeigt.

bash: ./wtf.sh: /bin: bad interpreter: Permission denied 

wtf.sh verfügt über ausführbare Rechte.

Was ist los?

Antwort

Hier haben Sie ein Leerzeichen anstelle eines Schrägstrichs:

 #! /bin bash  

Sollte sein:

 #! /bin/bash  

oder einfach

 #!/bin/bash  

(das erste Leerzeichen ist optional). Dem Shebang (#!) sollte der Pfad zu einer ausführbaren Datei folgen, gefolgt von ein Argument , z. B.

 #!/usr/bin/env sh  

In diesem Fall /usr/bin/env ist die ausführbare Datei; Weitere Informationen finden Sie unter man env.

Nur /bin bezieht sich auf ein Verzeichnis.

Kommentare

  • Verdammt, dumm mich! Vielen Dank! ' hat das nicht gesehen …
  • Vielleicht möchten Sie sich angewöhnen, stattdessen #!/bin/sh zu verwenden von #!/bin/bash), es sei denn, Sie wissen, dass Sie bash -Funktionen verwenden.
  • @ G-Man Vielen Dank für die Bereinigung ein bisschen nach oben. WRT bash vs. sh, ich folgte nur dem Muster aus der Frage (obwohl meine Tendenz darin besteht, sh nur zu verwenden, wenn ich weiß, dass ich ' m verwendet keine Bash-Funktionen).
  • Im Ubuntu-Terminal ist which bash hilfreich. Das gibt /bin/bash zurück. Am Anfang meines Bash-Skripts füge ich #!/bin/bash hinzu. Wenn ich dann das Bash-Skript ausführen möchte, gebe ich bash foo.sh ein. which sh wird also auf die gleiche Weise verwendet. sh foo.sh
  • @ G-Man, in der Arbeitswelt gibt es eine unglückliche Anzahl von Menschen, die nicht ' t wissen , ob sie Bash-Funktionen verwenden oder nicht. In vielen Fällen ist es ' vorzuziehen, dass ein Skript überhaupt nicht ausgeführt wird (da Bash im Shebang angegeben ist, aber fehlt), anstatt ausgeführt und ausgeführt zu werden etwas Unerwartetes (weil /bin/sh etwas anderes als Bash ist und das Skript unbemerkte Bashismen enthält). Siehe hier.

Antwort

Es ist erwähnenswert, dass, wenn der Mountpunkt, auf dem sich Ihr Skript befindet, das Attribut „noexec“ hat, Sie alles zeigen können, was Sie wollen, und es immer noch nicht funktioniert, aber den Interpreter mit dem Skript als Argument aufrufen wird (solange das wiederum versucht nicht, ein anderes Skript auf einem Noexec-Mount auszuführen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.