Ik ben op een 64-bits kali linux.
Ik heb een python-script gemaakt dat 2 argumenten nodig heeft om te starten. Ik wil niet elke keer exact dezelfde paden typen of zoeken in de geschiedenis van de commandos die ik in terminal heb gebruikt. Dus besloot ik om een eenvoudig script te maken dat het python-script met zijn argumenten aanroept.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Het is exact hetzelfde commando dat ik zou gebruiken in terminal. Ik krijg echter een foutmelding wanneer ik het scriptbestand probeer uit te voeren.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh heeft uitvoerbare rechten.
Wat is er mis?
Antwoord
Je hebt hier een spatie in plaats van een schuine streep:
#! /bin bash
Moet zijn:
#! /bin/bash
of gewoon
#!/bin/bash
(de eerste spatie is optioneel). De shebang (#!
) moet worden gevolgd door het pad naar een uitvoerbaar bestand , dat kan worden gevolgd door één argument , bijv.
#!/usr/bin/env sh
In dit geval /usr/bin/env
is het uitvoerbare bestand; zie man env
voor details.
Alleen /bin
verwijst naar een directory.
Opmerkingen
Antwoord
Het is vermeldenswaard dat als het mountpoint waarop uw script zich bevindt het “noexec” -attribuut heeft, u alles kunt kiezen wat u wilt en het zal nog steeds niet werken, maar het aanroepen van de interpreter met het script als argument zal dat wel doen (zolang die op zijn beurt niet proberen een ander script op een noexec-mount uit te voeren).
#!/bin/sh
(in plaats daarvan van#!/bin/bash
) tenzij je weet dat jebash
functies gebruikt.sh
te gebruiken als ik weet dat ik ' m niet met bash-functies).which bash
nuttig. Dat geeft/bin/bash
terug. Bovenaan mijn Bash-script voeg ik#!/bin/bash
toe. Als ik vervolgens het Bash-script wil uitvoeren, voer ikbash foo.sh
in. Duswhich sh
wordt op dezelfde manier gebruikt.sh foo.sh
/bin/sh
iets anders is dan Bash en er ongemerkte Bashisms in het script zijn). Zie hier.