Cili është ndryshimi midis ekzekutimit të një skenari bash duke përdorur sh dhe ./

E njëjta pyetje mund të lindë kur përdorni çdo lloj skenari, jo vetëm ato bash. A ka ndonjë ndryshim të madh midis ekzekutimit të një skenari përmes interpretuesit dhe drejtimit të tij direkt?

Një mister më shumë që do të zbulojmë në këtë post interesant nga Le të Përdorim Linux (UL).


Kur ekzekutoni një skenar duke ia kaluar emrin e skedarit skriptit një përkthyesi (sh, python, perl, etj.), Në ​​të vërtetë jeni duke ekzekutuar interpretuesin, duke kaluar programin që dëshironi të ekzekutoni si argument. Për shembull, ne ekzekutojmë interpretuesin sh duke i dhënë argumentin miscript.sh.

sh keqshkrim.sh

Nëse e ekzekutoni vetë skriptin, sistemi do të thërrasë përkthyesin për të cilin ka nevojë dhe, atëherë, po, ai do ta ekzekutojë skriptin duke e kaluar atë si një argument te interpretuesi, por të gjithë automatikisht dhe pa ditur përdoruesi që ekzekutoi skenarin ajo

./ dorëshkrim.sh

Për të ekzekutuar një skenar në vetvete, duhet të plotësohen 2 kushte:

1) skenari duhet të përmbajë një "linjë të zhurmshme". Kjo është rreshti i parë i një skenari, i cili duhet të fillojë me personazhet #! dhe se duhet të specifikoni rrugën ku ndodhet përkthyesi. Importantshtë e rëndësishme të theksohet se kjo gjendje është e vërtetë për çdo lloj shkrimi (python, perl, etj.), Jo vetëm për ato nga bash.

Kështu, për shembull, skenari ynë duhet të përmbajë si rresht të parë sa vijon:

#! / bin / bash

2) skedari duhet të ketë leje ekzekutimi:

Për t'i dhënë lejet e ekzekutimit skriptit tonë, duhet të shkruajmë:

chmod a + x keqshkrim.sh

Gati, tani thjesht drejtojeni kështu:

./ dorëshkrim.sh

Ose duke kopjuar skenarin në një rrugë "të veçantë" që lejon që ajo të thirret lehtë. Për shembull, mund ta kopjojmë në / usr / sbin dhe ta ekzekutojmë nga kudo pa përfshirë rrugën e plotë ku ndodhet:

Ne kopjojmë:

sudo cp gabim.sh / usr / sbin / keqshkrim

Ne ekzekutojmë:

shkrimin e gabuar

Siç mund ta shihni, në realitet ajo që ndodh në prapaskenë është shumë e ngjashme në të dy rastet. Sidoqoftë, duke përfshirë një "zhurmë", shkrimet tuaja do të jenë shumë më të lehta për t'u shpërndarë, pasi përdoruesit nuk do të duhet të kujtojnë rrugën ku ndodhen përkthyesit e nevojshëm për t'i ekzekutuar ato. Përfundim: në thelb bëhet fjalë për rehati.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   Oswaldo Villarroel dijo

    Pajtohem me ju Erpower, si versioni i përkthyesit, ashtu edhe rruga e tij janë të ndryshueshme dhe jo konstante, aq më tepër nëse konsiderohet se shpërndarjet GNU / Linux nuk janë të vetmet që përdorin Bash (ka edhe: freeBSD, OpenSolaris , Mac) dhe shumë prej tyre kanë konfigurime ose rrugë të ndryshme.

    Gjëja e rëndësishme është të dini se keni fleksibilitet (siç e përmendët mirë) për të luajtur me thirrjen në skenar, ose me ./ ose me sh (ose python ... etj)

  2.   ai_who_knows@gmail.com dijo

    Bash është një program kompjuterik, funksioni i të cilit është të interpretojë urdhërat.

    Ajo bazohet në shell Unix dhe është në përputhje me POSIX.

    në vend të kësaj sh është një program kompjuterik, funksioni i të cilit është të interpretojë urdhrat.
    Përfshin veçori të tilla si kontrolli i procesit, ridrejtimi
    hyrja / dalja, renditja dhe leximi i skedarit, mbrojtja,
    komunikimet dhe një gjuhë komande për shkrimin e programeve nga
    tufa ose skenare. Ishte përkthyesi i përdorur në versionet e para të Unix dhe u bë një standard de facto.

  3.   Diana C. dijo

    Përshëndetje, unë jam një fillestar në përdorimin e skenareve dhe do të doja të dija nëse dikush mund të më ndihmonte për një problem që kam:

    Unë jam duke menaxhuar një program që kërkon përfshirjen e disa të dhënave fillestare përmes konsolës dhe zbulova se përmes një skenari është e mundur të ekzekutohet programi me të dhënat fillestare, në mënyrë që të mos më duhet ta shkruaj atë pa pushim kur unë duhet të ekzekutohet programi.

    Nuk di si ta bëj, kështu që nëse dikush mund të më ndihmojë me këtë do të jem shumë mirënjohës.

  4.   Le të përdorim Linux dijo

    Shikoni, varet nga ajo gjuhë programuese në të cilën po shkruani skenarin. Sidoqoftë, në çdo rast ajo që ju nevojitet është:

    1) Nëse dëshironi që përdoruesi të futë ato të dhëna sa herë që skenari ekzekutohet, procedura më e zakonshme është që një variabël të marrë vlerat e futura në hyrje.

    2) Në rast se vlerat janë gjithmonë të njëjta, mund të përdorni konstante.

    3) Një mundësi tjetër është mundësia që skenari juaj të mund të marrë parametra.

    Gëzuar! Paul.

  5.   Le të përdorim Linux dijo

    Interestingshtë interesante ajo që përmendni ju. Quhet nga 2 format: vija shebang ose vija direkte bang. Unë ju kaloj të dhënat: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Gëzuar! Paul.

  6.   @llomellamomario dijo

    Interesante, unë kurrë nuk isha ndalur të mendoja për atë detaj. Do të ishte interesante të shihnin më shumë artikuj mbi retushimin e konzollarit, midis tyre rimbledhja e famshme e bërthamës për të hequr kilogramët e panevojshëm të kodit që janë vetëm atje për pajtueshmëri dhe për të përmirësuar shpejtësinë e sistemit.

  7.   Le të përdorim Linux dijo

    MIRË. Do ta mbaj këtë në mendje.
    Gëzuar! Paul.

  8.   Le të përdorim Linux dijo

    Jam i lumtur që funksionoi. Unë gjithmonë përpiqem të postoj gjëra që mendoj se mund të jenë interesante dhe praktike.
    Nje perqafim! Paul.

  9.   Felix Manuel Brito Amarante dijo

    Çdo programues me zakone të mira shton një "bang line" në rreshtin e parë të kodit. Në Python kurrë nuk harroj kodimin dhe linjën e zhurmës.
    #! / usr / bin / python2.7
    # *. * kodimi = utf-8 *. *

  10.   diex02 dijo

    Shkëlqyeshëm, shpresoj se mund të botoni më shumë informacion në lidhje me rreshtin e komandës, veçanërisht kur bëhet fjalë për përpilimin ose instalimin nga skedarët burim (tar.gz, etj.)

  11.   joe di Castro dijo

    Unë kurrë nuk kam dëgjuar për "bang line", unë gjithmonë e kam njohur atë si Shebang

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

    të fala

  12.   Jonathan Fernandez dijo

    shënim interesant ... faleminderit!

  13.   eM Thuaj eM dijo

    Sa interesante, e deklaroj veten plotësisht injorante në programim dhe gjithçka që lidhet me skenarin, nuk kisha ide se si funksionon, por kam vërejtur se disa e kanë atë titull.

  14.   Mario raimondi dijo

    Një sqarim që më ndodhi që ka të bëjë me këtë hyrje: Doja të instaloja një vegël ajri adobe (një kalkulator i shanseve të pokerit). Ajo që bën instaluesi i adobe air është të ekzekutojë skenarin përkatës me "su" por në formë ./ duke ju kërkuar fjalëkalimin rrënjë. Meqenëse skenari nuk kishte leje ekzekutimi, ajo hodhi lejen e refuzuar, zgjidhja: ekzekutoni skriptin me sh nëse nuk doni të ndryshoni lejet (më shpejt sesa të shkoni në dosjen tmp chmod dhe të gjitha ato). Atje skenari ekzekutohet, ai thërret instaluesin e adobe dhe një gjë tjetër flutur.

  15.   ero-sennin dijo

    Artikull shumë interesant! Faleminderit që më ndihmuat të mësoj pak më shumë rreth konsolës. Le të shohim nëse vazhdoni të botoni artikuj si këta ^^.
    Vazhdoni, ky është pa dyshim blogu im i preferuar !!

  16.   Fuqia e gabuar dijo

    Mbani në mend se mund të ketë ndryshime midis versioneve të përkthyesit që përdoren. Ekzekutimi i shkrimit drejtpërdrejt sipas shebang nuk ka asnjë mënyrë për të treguar se cilin version të përkthyesit duhet të përdorë, gjë që mund të jetë e nevojshme. Nëse ekzekutoni interpretuesin dhe e kaloni skriptin si një parametër, ju e dini se cili version i tij po ekzekutohet.

    Për shembull në Python, nëse shebang është #! / Usr / bin / python2.4 programi do të funksionojë ndryshe sesa nëse është #! / Usr / bin / python2.6 ose nëse është #! / Usr / bin / python (e cila zakonisht është një lidhje simbolike me versionin e Python që është instaluar dhe konfiguruar si parazgjedhje). Kjo ndodh sepse Python 2.6 ka funksionalitet të ri që nuk ekzistonte në Python 2.4, kështu që shkrimi i një skenari që përdor atë funksionalitet duke treguar një #! / Usr / bin / python shebang do të dështojë nëse sistemi ka instaluar vetëm python 2.4. Në vend të kësaj, gjithmonë mund ta detyroni skriptin të ekzekutohet me versionin e python që dëshironi duke e filluar me "python2.4 /path/al/script.py" ose "python2.6 /path/al/script.py/

    Për skriptet e guaskave, ka edhe ndryshime midis predhave që përdorni, kështu që përdorimi i #! / Bin / sh dhe #! / Bin / bash mund të ketë rezultate të ndryshme në varësi të skenarit. Nëse shkruani një skenar duke përdorur veçori që ekzistojnë vetëm në bash por specifikoni një #! / Bin / sh shebang, skripti juaj ndoshta do të funksionojë në Linux (në shumicën e shpërndarjeve / bin / sh është një lidhje simbolike me bash) por ndoshta do të dështojë në UNIX të tjera ku bash nuk është instaluar ose ku / bin / sh nuk është një lidhje simbolike me / bin / bash.

    Gjithashtu lidhur me transportueshmërinë, duhet të merret parasysh se rruga e treguar në shebang është absolute dhe ka raste kur përkthyesit instalohen në vende të tjera. Për shembull, është e zakonshme që interpretuesi i python të instalohet në / usr / local / bin / python nëse e keni shkarkuar dhe përpiluar Python në vend që të përdorni një paketë nga shpërndarja juaj. Nëse shebang-u juaj është #! / Usr / bin / python, skenari nuk do të funksionojë në ato sisteme. Për t'u përpjekur të shmangni këto probleme, mund të përdorni si shebang "#! / Usr / bin / env python" (ose "#! / Usr / bin / env sh") siç shpjegohet në http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Le të përdorim Linux dijo

    Faleminderit Jonathan! Mirë të shoh që komenton!
    Gëzuar! Paul.

  18.   antonio dijo

    Askund nuk bën atë që dua të di, ose të paktën nuk di si ta ngre në motorin e kërkimit, unë dua të krijoj një skenar që për një arsye xX ekzekuton komandën aftësinë ose «su» (është vetëm një shembull, por ato janë 2 rastet që mund të mendoj) dhe në rastin e aftësisë ndonjëherë më kërkon të shkruaj "yon" ose në "su" më kërkon fjalëkalimin ... Unë do të doja që skenari të zgjidhte ato opsione automatikisht ose duke kaluar një parametër ose duke përdorur ndonjë metodë që nuk e njeh .... Faleminderit per vemendjen

    1.    le të përdorim linux dijo

      Përshëndetje Antonio! Nëse problemi juaj është që të futni fjalëkalimin, unë nuk mendoj se ka ndonjë zgjidhje. Pikërisht sepse është një masë sigurie, në mënyrë që jo të gjithë të mund të instalojnë një program.
      Lidhur me aftësinë dhe detyrimin për të vendosur po, mendoj se mund të zgjidhet. Nuk më kujtohet në këtë pikë parametri i saktë për t'u përdorur, por thjesht zbulo në faqet e burrave. Hapni një terminal dhe futni komandën: njeri aftësi.
      Perqafo! Paul.

  19.   David M.M. dijo

    Post shumë i mirë.
    Veçanërisht më pëlqente - në këtë post - që pyetja / dyshimi që ngrihet të përgjigjet shumë qartë dhe koncizisht.