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
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).
#!/bin/shav#!/bin/bash) såvida du inte vet att du använderbash-funktioner.shnär jag vet att jag ' m inte med bash-funktioner).which bashtill 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 jagbash foo.sh. Såwhich shanvänds på samma sätt.sh foo.sh/bin/shär något annat än Bash och det finns obemärkt basism i manuset). Se här.