Tilladelse fra Bash-script nægtet & Dårlig tolk

Jeg er på en kali linux 64 bit.

Jeg har oprettet et python-script, der tager 2 argumenter til at starte. Jeg vil ikke skrive hver gang de nøjagtige samme stier eller søge i historikken over de kommandoer, jeg brugte i terminalen. Så jeg besluttede at oprette et simpelt script, der kalder python-scriptet med dets argumenter.

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

Det er nøjagtigt den samme kommando, som jeg ville bruge i terminalen. Jeg får dog en fejlmeddelelse, når jeg prøver at udføre scriptfilen.

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

wtf.sh har eksekverbare rettigheder.

Hvad er der galt?

Svar

Du har et mellemrum i stedet for en skråstreg her:

 #! /bin bash  

Skal være:

 #! /bin/bash  

eller simpelthen

 #!/bin/bash  

(det første mellemrum er valgfrit). Shebang (#!) skal følges af stien til en eksekverbar , som kan følges af ét argument , fx

 #!/usr/bin/env sh  

I dette tilfælde /usr/bin/env er den eksekverbare; se man env for detaljer.

Bare /bin henviser til en mappe.

Kommentarer

  • forbandet, fjollet mig! Tak! Så det ikke ' …
  • Det kan være en god idé at bruge #!/bin/sh af #!/bin/bash), medmindre du ved, at du bruger bash -funktioner.
  • @ G-Man Tak for din rengøring lidt op. WRT bash vs. sh, jeg fulgte netop mønsteret fra spørgsmålet (selvom min tendens er kun at bruge sh når jeg ved, at jeg ' m ikke ved hjælp af bash-funktioner).
  • I Ubuntu-terminalen er which bash nyttigt. Det returnerer /bin/bash. Øverst i mit Bash-script tilføjer jeg #!/bin/bash. Så når jeg vil køre Bash-scriptet, indtaster jeg bash foo.sh. Så which sh bruges på samme måde. sh foo.sh
  • @ G-Man, i arbejdsdagen er der et uheldigt antal mennesker, der ikke ' t ved om de bruger Bash-funktioner eller ej. I mange tilfælde foretrækkes det ' at have et script slet ikke køre (fordi Bash er angivet i shebang men mangler) snarere end at køre og gøre noget uventet (fordi /bin/sh er noget andet end Bash, og der er ubemærket Bashisms i scriptet). Se her.

Svar

Det er værd at bemærke, at hvis det monteringspunkt, som dit script ligger på, har attributten “noexec”, så kan du shebang alt, hvad du vil, og det stadig ikke fungerer, men at påkalde tolk med scriptet som argument vil (så længe det prøver igen ikke at køre et andet script på en noexec-mount).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *