Koja je razlika između pokretanja bash skripte pomoću sh i ./

To isto pitanje može se pojaviti kada koristite bilo koju vrstu skripte, ne samo one bash. Postoji li glavna razlika između pokretanja skripte kroz tumač i izravnog pokretanja?

Još jedna misterija koju ćemo otkriti u ovom zanimljivom postu iz Upotrijebimo Linux (uL).


Kada pokrenete skriptu prosljeđivanjem imena datoteke skripte tumaču (sh, python, perl, itd.), Zapravo izvršavate tumač, a program koji želite izvršiti prosljeđujete kao argument. Na primjer, pokrećemo tumač sh tako da mu prosljeđujemo argument miscript.sh.

sh pogrešno.sh

Ako skriptu pokrenete samostalno, sustav će pozvati interpretatora koji mu je potreban i tada će, da, izvršiti skriptu, prosljeđujući je kao argument tumaču, ali sve automatski i bez znanja korisnika koji je izvršio skriptu.

./myscript.sh

Da bi se skripta pokrenula sama, moraju biti zadovoljena 2 uvjeta:

1) skripta mora sadržavati "prasak". Ovo je prvi redak skripte, koji mora započeti znakovima #! i da morate navesti put na kojem se nalazi tumač. Važno je napomenuti da je ovaj uvjet istinit za bilo koju vrstu skripte (python, perl itd.), A ne samo za one iz basha.

Tako bi, na primjer, naša skripta trebala sadržavati sljedeće kao prvi redak:

#! / bin / bash

2) datoteka mora imati dozvole za izvršavanje:

Da bismo odobrili izvršenje našoj skripti, moramo napisati:

chmod a + x miscript.sh

Spremni, sada samo pokrenite ovako:

./myscript.sh

Ili kopiranjem skripte na "posebnu" putanju koja omogućuje lako pozivanje na nju. Na primjer, možemo ga kopirati u / usr / sbin i pokrenuti s bilo kojeg mjesta bez uključivanja pune staze na kojoj se nalazi:

Kopiramo:

sudo cp miscript.sh / usr / sbin / miscript

Izvršavamo:

pogrešan zapis

Kao što vidite, u stvarnosti je ono što se događa iza kulisa u oba slučaja vrlo slično. Međutim, uključivanjem "praska", vaše će skripte biti puno lakše distribuirati, jer korisnici neće morati pamtiti put na kojem se nalaze potrebni tumači da bi ih mogli izvršiti. Zaključak: u osnovi je riječ o udobnosti.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Oswaldo Villarroel dijo

    Slažem se s vama, Erpower, i verzija interpretatora i njegov put su promjenjivi i nisu konstantni, čak tim više ako se smatra da GNU / Linux distribucije nisu jedine koje koriste Bash (postoje i: freeBSD, OpenSolaris , Mac) i mnogi od njih imaju različite konfiguracije ili rute.

    Važno je znati da imate fleksibilnost (kao što ste dobro spomenuli) da se igrate pozivom na skriptu, bilo sa ./ ili sa sh (ili python ... itd.)

  2.   on_who_knows@gmail.com dijo

    Bash je računalni program čija je funkcija tumačenje naloga.

    Temelji se na Unix ljusci i u skladu je s POSIX-om.

    umjesto toga sh je računalni program čija je funkcija tumačenje naloga.
    Uključuje značajke kao što su kontrola procesa, preusmjeravanje
    ulaz / izlaz, popis datoteka i čitanje, zaštita,
    komunikacije i naredbeni jezik za pisanje programa
    serije ili skripte. Bio je to tumač korišten u prvim verzijama Unixa i postao je de facto standard.

  3.   Diana C. dijo

    Pozdrav, početnik sam u korištenju skripti i želio bih znati može li mi netko pomoći s problemom koji imam:

    Upravljam programom koji zahtijeva uključivanje nekoliko početnih podataka kroz konzolu i otkrio sam da je putem skripte moguće izvršiti program s početnim podacima, tako da ga ne moram pisati iznova i iznova kad trebate pokrenuti program.

    Ne znam kako to učiniti, pa ako mi netko može pomoći u ovome, bit ću mu jako zahvalan.

  4.   Koristimo Linux dijo

    Vidite, ovisi o tome na kojem programskom jeziku pišete skriptu. Međutim, u svakom slučaju trebate:

    1) Ako želite da korisnik mora unijeti te podatke kad god se skripta izvrši, najčešći postupak je da varijabla uzima vrijednosti unesene u ulaz.

    2) U slučaju da su vrijednosti uvijek iste, možete koristiti konstante.

    3) Druga mogućnost je mogućnost da vaša skripta može uzeti parametre.

    Živjeli! Pavao.

  5.   Koristimo Linux dijo

    Zanimljivo je što spominjete. Naziva se od 2 oblika: shebang linija ili izravno praska linija. Dajem vam podatke: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Živjeli! Pavao.

  6.   @llomellamomario dijo

    Zanimljivo, nikad nisam prestao razmišljati o tom detalju. Bilo bi zanimljivo vidjeti više članaka o retuširanju konzole, među kojima je i poznata rekompilacija jezgre za uklanjanje nepotrebnih kilograma koda koji su tu samo radi kompatibilnosti i poboljšanja brzine sustava.

  7.   Koristimo Linux dijo

    U REDU. To ću imati na umu.
    Živjeli! Pavao.

  8.   Koristimo Linux dijo

    Drago mi je da je uspjelo. Uvijek se trudim objavljivati ​​stvari za koje mislim da bi mogle biti zanimljive i praktične.
    Zagrljaj! Pavao.

  9.   Felix Manuel Brito Amarante dijo

    Svaki programer s dobrim navikama dodaje "prasak" u prvi redak koda. U Pythonu nikad ne zaboravljam kodiranje i prasak.
    #! / Usr / bin / python2.7
    # *. * kodiranje = utf-8 *. *

  10.   diex02 dijo

    Izvrsno, nadamo se da možete objaviti više informacija o naredbenom retku, posebno kada je u pitanju sastavljanje ili instaliranje iz izvornih datoteka (tar.gz, itd.)

  11.   joe di castro dijo

    Nikad nisam čuo za "prasak", oduvijek sam ga zvao Shebang

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

    pozdravi

  12.   Jonathan Fernandez dijo

    zanimljiva napomena ... hvala!

  13.   eM Reci eM dijo

    Koliko zanimljivo, proglašavam se totalno neukim u programiranju i svemu vezanom uz skriptu, nisam imao pojma kako to funkcionira, ali primijetio sam da neki imaju to zaglavlje.

  14.   Mario raimondi dijo

    Pojašnjenje koje mi se dogodilo u vezi s ovim unosom: Htio sam instalirati gadget od adobe zraka (kalkulator poker šansi). Ono što adobe air installer radi je pokretanje odgovarajuće skripte sa "su", ali u obliku ./ tražeći od vas root lozinku. Budući da skripta nije imala dopuštenja za izvršenje, bacila je odbijeno dopuštenje, rješenje: pokrenite skriptu s sh ako ne želite promijeniti dozvole (brže od odlaska u mapu tmp chmod i sve to). Tamo se skripta izvršava, poziva adobe instalatera i još jednu leptir stvar.

  15.   Ero-Senin dijo

    Vrlo zanimljiv članak! Hvala što ste mi pomogli saznati malo više o konzoli. Da vidimo hoćete li i dalje objavljivati ​​članke poput ovih ^^.
    Nastavite, ovo je bez sumnje moj omiljeni blog !!

  16.   Snaga snage dijo

    Imajte na umu da mogu postojati razlike između korištenih verzija tumača. Izvođenje skripte izravno prema shebangu ne može navesti koju verziju tumača koristiti, što bi moglo biti potrebno. Ako umjesto toga pokrenete tumač i proslijedite skriptu kao parametar, znate koja se njegova verzija izvodi.

    Na primjer, u Pythonu, ako je shebang #! / Usr / bin / python2.4, program će se izvoditi drugačije nego ako je #! / Usr / bin / python2.6 ili ako je #! / Usr / bin / python (što je obično simbolična veza do verzije Pythona koja je instalirana i konfigurirana prema zadanim postavkama). To se događa zato što Python 2.6 ima novu funkcionalnost koja nije postojala u Pythonu 2.4, pa pisanje skripte koja koristi tu funkcionalnost označavajući #! / Usr / bin / python shebang neće uspjeti ako sustav ima instaliran samo python 2.4. Umjesto toga, skriptu uvijek možete prisiliti da se pokrene s željenom verzijom pythona tako što ćete je pokrenuti s "python2.4 /path/al/script.py" ili "python2.6 /path/al/script.py/

    Za skripte ljuske također postoje razlike između školjki koje koristite, pa upotreba #! / Bin / sh i #! / Bin / bash može imati različite rezultate, ovisno o skripti. Ako napišete skriptu koristeći značajke koje postoje samo u bashu, ali naznačite shebang #! / Bin / sh, vaša će skripta vjerojatno raditi na Linuxu (na većini distribucija / bin / sh je simbolična veza do basha), ali vjerojatno neće uspjeti u ostalim UNIX-ima gdje bash nije instaliran ili gdje / bin / sh nije simbolična veza do / bin / bash.

    Također vezano uz prenosivost, mora se uzeti u obzir da je put naznačen u shebangu apsolutni, a postoje slučajevi kada su tumači instalirani na drugim mjestima. Na primjer, uobičajeno je da je python interpreter instaliran u / usr / local / bin / python ako ste preuzeli i kompajlirali Python umjesto da koristite paket iz vaše distribucije. Ako je vaš shebang #! / Usr / bin / python, skripta neće raditi na tim sustavima. Da biste pokušali izbjeći ove probleme, možete upotrijebiti kao shebang "#! / Usr / bin / env python" (ili "#! / Usr / bin / env sh") kako je objašnjeno u http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Koristimo Linux dijo

    Hvala Jonathane! Drago mi je vidjeti vaš komentar!
    Živjeli! Pavao.

  18.   Antonio dijo

    Nigdje ono što želim znati ili barem ne znam kako to podići u tražilici, želim stvoriti skriptu koja iz razloga xX izvršava naredbu aptitude ili «su» (to je samo primjer, ali to su 2 slučaja kojih se mogu sjetiti) i u slučaju sposobnosti ponekad me traži da unesem "yon" ili u "su" traži lozinku ... Želio bih da skripta odabere te opcije automatski bilo prosljeđivanjem parametra ili pomoću neke metode koju on ne poznaje .... Hvala na pažnji

    1.    poslužimo se linuxom dijo

      Pozdrav Antonio! Ako je vaš problem unošenje lozinke, mislim da ne postoji rješenje. Upravo zato što je to sigurnosna mjera, tako da ne mogu svi instalirati program.
      Što se tiče sklonosti i potrebe da kažem da, mislim da se to može riješiti. Trenutno se ne sjećam točnog parametra koji bih upotrijebio, ali samo saznajte na man stranicama. Otvorite terminal i unesite naredbu: man aptitude.
      Zagrliti! Pavao.

  19.   David M.M. dijo

    Vrlo dobar post.
    Posebno mi se svidjelo - u ovom postu - što se na postavljeno pitanje / sumnju odgovara vrlo jasno i kratko.