I ”m 64-bittisellä kali linuxilla.
Olen luonut python-komentosarjan, jonka käynnistämiseen tarvitaan 2 argumenttia. En halua kirjoittaa joka kerta tarkalleen samoja polkuja tai etsiä terminaalissa käytettyjen komentojen historiasta. Joten päätin luoda yksinkertaisen komentosarjan, joka kutsuu python-komentosarjan argumentteineen.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Se on täsmälleen sama komento, jota käytän terminaalissa. Saan kuitenkin virheilmoituksen, kun yritän suorittaa komentosarjatiedoston.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh: llä on suoritettavat oikeudet.
Mikä vikaa on?
Vastaa
Sinulla on välilyönti eteenpäin viivan sijaan:
#! /bin bash
Pitäisi olla:
#! /bin/bash
tai yksinkertaisesti
#!/bin/bash
(ensimmäinen väli on valinnainen). Shebangin (#!
) tulisi seurata polkua suoritettavaan tiedostoon , jota voi seurata yksi argumentti , esim.
#!/usr/bin/env sh
Tässä tapauksessa /usr/bin/env
on suoritettava tiedosto; katso lisätietoja kohdasta man env
.
Vain /bin
viittaa hakemistoon.
Kommentit
Vastaa
On syytä huomata, että jos kiinnityskohdassa, jossa komentosarjanasi on, on ”noexec” -attribuutti, voit shebangata kaiken haluamasi ja se ei silti toimi, mutta kutsumalla tulkkia komentosarjan kanssa argumentiksi (niin kauan kuin joka puolestaan ei yritä suorittaa toista komentosarjaa noexec-asennuksessa)
#!/bin/sh
(sen sijaan#!/bin/bash
), ellet tiedä, että käytätbash
-ominaisuuksia.sh
vain, kun tiedän, että ' m ei käytä bash-ominaisuuksia).which bash
on hyödyllinen. Tämä palauttaa/bin/bash
. Lisään Bash-komentosarjan yläosaan#!/bin/bash
. Sitten kun haluan suorittaa Bash-komentosarjan, kirjoitanbash foo.sh
. Jotenwhich sh
käytetään samalla tavalla.sh foo.sh
/bin/sh
on jotain muuta kuin bash ja komentosarjassa on huomaamattomia basismeja). Katso täältä.