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/sh
af#!/bin/bash
), medmindre du ved, at du brugerbash
-funktioner.sh
når jeg ved, at jeg ' m ikke ved hjælp af bash-funktioner).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 jegbash foo.sh
. Såwhich sh
bruges på samme måde.sh foo.sh
/bin/sh
er noget andet end Bash, og der er ubemærket Bashisms i scriptet). Se her.