Bash-komentosarjan käyttöoikeus estetty & Huono tulkki

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

  • hitto, typerä minua! Kiitos! En nähnyt ', että …
  • Saatat haluta tulla tavaksi käyttää #!/bin/sh (sen sijaan #!/bin/bash), ellet tiedä, että käytät bash -ominaisuuksia.
  • @ G-Man Kiitos tämän puhdistamisesta hieman ylöspäin. WRT bash vs. sh, seurasin vain kysymyksen mallia (vaikka taipumuksenani on käyttää sh vain, kun tiedän, että ' m ei käytä bash-ominaisuuksia).
  • Ubuntu-päätelaitteessa which bash on hyödyllinen. Tämä palauttaa /bin/bash. Lisään Bash-komentosarjan yläosaan #!/bin/bash. Sitten kun haluan suorittaa Bash-komentosarjan, kirjoitan bash foo.sh. Joten which sh käytetään samalla tavalla. sh foo.sh
  • @ G-Man, työmaailmassa on valitettavasti paljon ihmisiä, jotka eivät ' t tiedä käyttävätkö he Bash-ominaisuuksia vai eivät. Monissa tapauksissa ' on suositeltavaa, että komentosarjaa ei käytetä lainkaan (koska Bash on määritetty shebangissa, mutta se puuttuu) sen sijaan, että se suoritetaan ja tehdään jotain odottamatonta (koska /bin/sh on jotain muuta kuin bash ja komentosarjassa on huomaamattomia basismeja). Katso täältä.

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)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *