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.
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)
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.
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.
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.
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.
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.
MIRË. Do ta mbaj këtë në mendje.
Gëzuar! Paul.
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.
Ç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 *. *
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.)
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
shënim interesant ... faleminderit!
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.
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.
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 !!
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
Faleminderit Jonathan! Mirë të shoh që komenton!
Gëzuar! Paul.
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
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.
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.