Tillstånd för Bash-skript nekad & Dålig tolk

Jag är på en kali linux 64 bit.

Jag har skapat ett pythonscript som tar två argument att starta. Jag vill inte skriva ut varje gång exakt samma sökvägar eller söka i kommandot som jag använde i terminalen. Så jag bestämde mig för att skapa ett enkelt skript som kallar python-skriptet med dess argument.

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

Det är exakt samma kommando som jag skulle använda i terminalen. Men jag får ett felmeddelande när jag försöker köra skriptfilen.

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

wtf.sh har körbara rättigheter.

Vad är fel?

Svar

Du har ett mellanslag istället för ett snedstreck framåt:

 #! /bin bash  

Bör vara:

 #! /bin/bash  

eller helt enkelt

 #!/bin/bash  

(det första mellanslaget är valfritt). Shebang (#!) bör följas av sökvägen till en körbar , som kan följas av ett argument , t.ex.

 #!/usr/bin/env sh  

I det här fallet /usr/bin/env är körbar; se man env för detaljer.

Bara /bin hänvisar till en katalog.

Kommentarer

  • fan, dumt mig! Tack! Såg ' inte det …
  • Du kanske vill vana dig med att använda #!/bin/sh av #!/bin/bash) såvida du inte vet att du använder bash -funktioner.
  • @ G-Man Tack för att du har rengjort det här upp lite. WRT bash vs sh, jag följde bara mönstret från frågan (även om min tendens är att bara använda sh när jag vet att jag ' m inte med bash-funktioner).
  • I Ubuntu-terminalen är which bash till hjälp. Det returnerar /bin/bash. Högst upp i mitt Bash-skript lägger jag till #!/bin/bash. När jag sedan vill köra Bash-skriptet anger jag bash foo.sh. Så which sh används på samma sätt. sh foo.sh
  • @ G-Man, i arbetsdagens värld finns det ett olyckligt antal människor som inte ' t vet om de använder Bash-funktioner eller inte. I många fall är det ' att föredra att ha ett skript inte springa alls (eftersom Bash anges i shebang men saknas) snarare än att köra och göra något oväntat (eftersom /bin/sh är något annat än Bash och det finns obemärkt basism i manuset). Se här.

Svar

Det är värt att notera att om monteringspunkten som ditt skript ligger på har attributet ”noexec”, så kan du shebang allt du vill och det kommer fortfarande inte att fungera, men att åberopa tolk med skriptet som ett argument kommer (så länge som som i sin tur inte försöker köra ett annat skript på en noexec-montering).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *