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/sh
av#!/bin/bash
) såvida du inte vet att du använderbash
-funktioner.sh
när jag vet att jag ' m inte med bash-funktioner).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 jagbash foo.sh
. Såwhich sh
anvä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.