Kuo skiriasi paleisti „bash“ scenarijų naudojant „sh“ ir ./

Tas pats klausimas gali kilti naudojant bet kokio tipo scenarijus, ne tik bash. Ar yra didelis skirtumas tarp scenarijaus paleidimo per vertėją ir tiesioginio paleidimo?

Dar viena paslaptis, kurią mes atskleisime šiame įdomiame įraše iš „Let's Use Linux“ (JAV).


Kai paleidžiate scenarijų, perduodami scenarijaus failo pavadinimą vertėjui (sh, python, perl ir kt.), Jūs iš tikrųjų vykdote vertėją, perduodate programą, kurią norite vykdyti kaip argumentą. Pvz., Paleidžiame „sh“ vertėją perduodant jam argumentą „miscript.sh“.

sh klaida.sh

Jei paleisite scenarijų pats, sistema paskambins reikalingam vertėjui ir tada, taip, ji įvykdys scenarijų, perduodama jį kaip argumentą vertėjui, tačiau viskas automatiškai ir nežinant scenarijų vykdžiusiam vartotojui.

./myscript.sh

Norint paleisti scenarijų atskirai, turi būti įvykdytos 2 sąlygos:

1) scenarijuje turi būti „sprogimo linija“. Tai yra pirmoji scenarijaus eilutė, kuri turi prasidėti simboliais #! ir kad turite nurodyti kelią, kuriame yra vertėjas. Svarbu pažymėti, kad ši sąlyga galioja bet kokio tipo scenarijams (python, perl ir kt.), Ne tik iš bash.

Pavyzdžiui, mūsų scenarijuje kaip pirmoji eilutė turėtų būti:

#! / bin / bash

2) failas turi turėti leidimus:

Norėdami suteikti vykdymo teises savo scenarijui, turime parašyti:

chmod a + x klaidingas.sh

Pasiruošę, dabar tiesiog paleiskite jį taip:

./myscript.sh

Arba nukopijuodami scenarijų „specialiu“ keliu, leidžiančiu jį lengvai iškviesti. Pavyzdžiui, galime jį nukopijuoti į / usr / sbin ir paleisti iš bet kur, neįtraukdami viso kelio, kuriame jis yra:

Mes kopijuojame:

sudo cp miscript.sh / usr / sbin / miscript

Mes vykdome:

neteisingas aprašymas

Kaip matote, iš tikrųjų tai, kas vyksta užkulisiuose, abiem atvejais yra labai panaši. Tačiau įtraukus „sprogimo liniją“, scenarijus bus daug lengviau paskirstyti, nes vartotojams nereikės prisiminti kelio, kuriame yra reikalingi vertėjai, kad galėtų juos vykdyti. Išvada: iš esmės tai yra komforto klausimas.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   Oswaldo Villarroelis sakė

    Aš sutinku su jumis „Erpower“, tiek vertėjo versija, tiek jos kelias yra kintamas ir nėra pastovus, tuo labiau, jei manoma, kad GNU / Linux paskirstymai nėra vieninteliai, kurie naudoja „Bash“ (taip pat yra: freeBSD, OpenSolaris , „Mac“) ir daugelis jų turi skirtingas konfigūracijas ar maršrutus.

    Svarbu žinoti, kad turite lankstumo (kaip gerai minėjote) žaisti su iškvietimu į scenarijų, naudodami ./ arba sh (arba python ... ir tt)

  2.   he_who_knows@gmail.com sakė

    „Bash“ yra kompiuterinė programa, kurios funkcija yra interpretuoti užsakymus.

    Jis pagrįstas „Unix“ apvalkalu ir suderinamas su POSIX.

    o sh yra kompiuterinė programa, kurios funkcija yra interpretuoti užsakymus.
    Įtraukiamos tokios funkcijos kaip proceso valdymas, peradresavimas
    įvestis / išvestis, failų sąrašas ir skaitymas, apsauga,
    komunikacijos ir komandų kalba programoms rašyti
    partijos ar scenarijai. Tai buvo vertėjas, naudojamas pirmosiose „Unix“ versijose, ir tai tapo de facto standartu.

  3.   Diana C. sakė

    Sveiki, aš pradedu naudoti scenarijus ir norėčiau sužinoti, ar kas nors gali man padėti iškilus problemai:

    Aš valdau programą, kuriai reikia per konsolę įtraukti kelis pradinius duomenis, ir sužinojau, kad per scenarijų galima vykdyti programą su pradiniais duomenimis, kad nereikėtų jų rašyti vėl ir vėl, kai aš reikia paleisti programą.

    Aš nežinau, kaip tai padaryti, todėl, jei kas nors gali man padėti, būsiu labai dėkinga.

  4.   Panaudokime „Linux“ sakė

    Tai priklauso nuo to, kokia programavimo kalba rašote scenarijų. Tačiau bet kokiu atveju jums reikia:

    1) Jei norite, kad vartotojas turėtų įvesti tuos duomenis, kai tik vykdomas scenarijus, dažniausiai kintamasis imasi įvestyje įvestas reikšmes.

    2) Jei reikšmės visada yra tos pačios, galite naudoti konstantas.

    3) Kitas variantas yra galimybė, kad scenarijus gali priimti parametrus.

    Cheers! Paulius.

  5.   Panaudokime „Linux“ sakė

    Įdomu tai, ką pamini. Tai vadinama 2 formomis: shebang linija arba tiesiogiai bang line. Aš suteikiu jums informaciją: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Cheers! Paulius.

  6.   @llomellamomario sakė

    Įdomu tai, kad niekada nebuvau sustojusi galvojusi apie tą detalę. Įdomu būtų pamatyti daugiau straipsnių apie „Consoler“ retušavimą, tarp jų - garsų branduolio perkompiliavimą, kad būtų pašalinti nereikalingi kilogramai kodų, kurie skirti tik suderinamumui ir sistemos spartai pagerinti.

  7.   Panaudokime „Linux“ sakė

    GERAI. Aš tai turėsiu omenyje.
    Cheers! Paulius.

  8.   Panaudokime „Linux“ sakė

    Džiaugiuosi, kad tai pavyko. Visada stengiuosi paskelbti dalykus, kurie, manau, gali būti įdomūs ir praktiški.
    Apkabinimas! Paulius.

  9.   Feliksas Manuelis Brito Amarante sakė

    Kiekvienas programuotojas, turintis gerų įpročių, prie pirmosios kodo eilutės prideda „spragtelėjimo eilutę“. „Python“ niekada nepamirštu kodavimo ir sprogimo linijos.
    2.7. / usr / bin / python
    # *. * kodavimas = utf-8 *. *

  10.   diex02 sakė

    Puiku, tikiuosi, kad galite paskelbti daugiau informacijos apie komandinę eilutę, ypač kai reikia rinkti ar įdiegti iš šaltinio failų (tar.gz ir kt.)

  11.   Joe di Castro sakė

    Niekada nebuvau girdėjęs apie „sprogimo liniją“, visada žinojau ją kaip „Shebang“

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29

    saludos

  12.   Jonathanas Fernandezas sakė

    įdomi pastaba ... ačiū!

  13.   eM Sakyk eM sakė

    Kaip įdomu, aš skelbiu save visiškai nemokančiu programuoti ir visko, kas susiję su scenarijais, neįsivaizdavau, kaip tai veikia, bet pastebėjau, kad kai kurie turi tą antraštę.

  14.   Mario raimondi sakė

    Man nutikęs paaiškinimas, susijęs su šiuo įrašu: norėjau įdiegti „Adobe air“ įtaisą (pokerio šansų skaičiuoklę). Tai, ką daro „Adobe Air“ diegimo programa, paleidžia atitinkamą scenarijų su „su“, bet formoje ./ paprašo jūsų šakninio slaptažodžio. Kadangi scenarijus neturėjo vykdymo leidimų, jis atsisakė leidimo, sprendimas: paleiskite scenarijų naudodami sh, jei nenorite pakeisti leidimų (greičiau nei eidami į aplanką tmp chmod ir visa kita). Ten vykdomas scenarijus, jis vadina „Adobe“ diegimo programą ir dar ką nors drugeliu.

  15.   Ero-Senninas sakė

    Labai įdomus straipsnis! Dėkojame, kad padėjote sužinoti šiek tiek daugiau apie konsolę. Pažiūrėkime, ar jūs nuolat skelbiate tokius straipsnius kaip šie ^ ^.
    Tęskite tai, be abejonės, mano mėgstamiausias tinklaraštis !!

  16.   „Erpower“ sakė

    Atminkite, kad gali būti skirtumų tarp naudojamų vertėjo versijų. Vykdant scenarijų tiesiogiai pagal „shebang“, negalima nurodyti, kurią vertėjo versiją naudoti, o tai gali prireikti. Jei vietoj to paleidžiate vertėją ir perduodate scenarijų kaip parametrą, žinote, kuri jo versija veikia.

    Pvz., „Python“, jei „shebang“ yra #! / Usr / bin / python2.4, programa veiks kitaip nei jei ji yra #! / Usr / bin / python2.6 arba jei ji bus #! / Usr / bin / python (tai paprastai yra simbolinė nuoroda į „Python“ versiją, kuri yra įdiegta ir sukonfigūruota pagal numatytuosius nustatymus). Taip atsitinka todėl, kad „Python 2.6“ turi naują funkcionalumą, kurio nebuvo „Python 2.4“, todėl scenarijaus, kuriame naudojama ši funkcija, nurodymas #! / Usr / bin / python shebang parašyti nepavyks, jei sistemoje yra įdiegtas tik „Python 2.4“. Vietoj to, jūs visada galite priversti scenarijų veikti su norima pitono versija paleidę jį su „python2.4 /path/al/script.py“ arba „python2.6 /path/al/script.py/

    „Shell“ scenarijuose taip pat yra skirtumų tarp naudojamų apvalkalų, todėl naudojant #! / Bin / sh ir #! / Bin / bash gali būti skirtingi rezultatai, atsižvelgiant į scenarijų. Jei scenarijų rašote naudodamas funkcijas, kurios egzistuoja tik „bash“, bet nurodote #! / Bin / sh shebang, scenarijus greičiausiai veiks „Linux“ (daugumoje distribucijų / bin / sh yra simbolinė nuoroda į bash), bet tikriausiai nepavyks kituose UNIX, kur „bash“ nėra įdiegtas arba kur / bin / sh nėra simbolinė nuoroda į / bin / bash.

    Taip pat atsižvelgiant į perkeliamumą, reikia atsižvelgti į tai, kad „shebang“ nurodytas kelias yra absoliutus, o kartais vertėjai yra įrengti kitose vietose. Pvz., Python vertėjas paprastai yra įdiegtas aplanke / usr / local / bin / python, jei atsisiuntėte ir sukompilavote Python, o ne naudojote paketą iš savo paskirstymo. Jei jūsų „shebang“ yra #! / Usr / bin / python, scenarijus šiose sistemose neveiks. Norėdami išvengti šių problemų, galite naudoti kaip „shebang“ „#! / Usr / bin / env python“ (arba „#! / Usr / bin / env sh“), kaip paaiškinta http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Panaudokime „Linux“ sakė

    Ačiū Jonathan! Smagu, kad komentuojate!
    Cheers! Paulius.

  18.   Antonio sakė

    Niekur nedarau to, ką noriu žinoti, arba bent jau nežinau, kaip jį pakelti paieškos sistemoje, noriu sukurti scenarijų, kuris dėl tam tikrų priežasčių xX vykdo komandą aptitude arba «su» (tai tik pavyzdys, bet tai yra 2 atvejai, kuriuos galiu pagalvoti), o tam, kad būtų tinkama, kartais manęs prašo įvesti „yon“ arba „su“ prašoma slaptažodžio ... Norėčiau, kad scenarijus pasirinktų šias parinktis automatiškai perduodant parametrą arba naudojant kokį nors metodą, kurio jis nežino .... Ačiū už dėmesį

    1.    naudokime linux sakė

      Sveiki, Antonio! Jei jūsų problema yra įvesti slaptažodį, nemanau, kad yra sprendimas. Būtent todėl, kad tai yra saugumo priemonė, todėl ne visi gali įdiegti programą.
      Kalbant apie gabumus ir turint pasakyti „taip“, manau, kad tai galima išspręsti. Šiuo metu nepamenu tikslaus naudoti parametro, bet tiesiog sužinokite apie žmogaus puslapius. Atidarykite terminalą ir įveskite komandą: man aptitude.
      Apkabink! Paulius.

  19.   Deividas MM sakė

    Labai geras postas.
    Man ypač patiko-šiame poste- kad į iškilusį klausimą / abejones atsakoma labai aiškiai ir glaustai.