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
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).
#!/bin/shaf#!/bin/bash), medmindre du ved, at du brugerbash-funktioner.shnår jeg ved, at jeg ' m ikke ved hjælp af bash-funktioner).which bashnyttigt. Det returnerer/bin/bash. Øverst i mit Bash-script tilføjer jeg#!/bin/bash. Så når jeg vil køre Bash-scriptet, indtaster jegbash foo.sh. Såwhich shbruges på samme måde.sh foo.sh/bin/sher noget andet end Bash, og der er ubemærket Bashisms i scriptet). Se her.