Jeg er på en kali linux 64 bit.
Jeg har laget et python-skript som tar to argumenter å starte. Jeg vil ikke skrive ut hver gang nøyaktig de samme stiene eller søke i historien til kommandoene jeg brukte i terminalen. Så jeg bestemte meg for å lage et enkelt skript som kaller python-skriptet med argumentene.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Det er nøyaktig den samme kommandoen jeg vil bruke i terminalen. Jeg får imidlertid en feilmelding når jeg prøver å kjøre skriptfilen.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh har kjørbare rettigheter.
Hva er galt?
Svar
Du har et mellomrom i stedet for en skråstrek her:
#! /bin bash
Bør være:
#! /bin/bash
eller bare
#!/bin/bash
(den første plassen er valgfri). Shebang (#!
) skal følges av banen til en kjørbar , som kan følges av ett argument , f.eks.
#!/usr/bin/env sh
I dette tilfellet /usr/bin/env
er kjørbar; se man env
for detaljer.
Bare /bin
refererer til en katalog.
Kommentarer
Svar
Det er verdt å merke seg at hvis monteringspunktet som skriptet ditt ligger på har «noexec» -attributtet, kan du shebang alt du vil, og det vil fortsatt ikke fungere, men å påkalle tolk med skriptet som argument vil (så lenge som i sin tur ikke prøver å kjøre et nytt skript på en noexec-montering).
#!/bin/sh
(i stedet av#!/bin/bash
) med mindre du vet at du brukerbash
-funksjoner.sh
når jeg vet at jeg ' m ikke ved hjelp av bash-funksjoner).which bash
nyttig. Det returnerer/bin/bash
. Øverst i Bash-skriptet mitt legger jeg til#!/bin/bash
. Så når jeg vil kjøre Bash-skriptet, skriver jeg innbash foo.sh
. Såwhich sh
brukes på samme måte.sh foo.sh
/bin/sh
er noe annet enn Bash, og det er ubemerkede basisme i skriptet). Se her.