Mis vahe on bashi skripti käitamisel sh ja ./ abil

Sama küsimus võib tekkida mis tahes tüüpi skriptide kasutamisel, mitte ainult bash-skriptide korral. Kas on suur erinevus skripti tõlgi kaudu ja otse käivitamisel?

Veel üks mõistatus, mille paljastame selles huvitavas postituses, mille kasutame Let's Use Linuxi (uL).


Kui käivitate skripti, edastades skripti failinime interpretaatorile (sh, python, perl jne), käivitate tõlgi, edastades argumendina programmi, mille soovite käivitada. Näiteks käivitame sh-tõlgi, edastades talle argumendi miscript.sh.

sh myscript.sh

Kui käivitate skripti iseenesest, helistab süsteem vajalikule tõlkele ja siis jah, käivitab skripti, edastades selle argumendina tõlkile, kuid kõik automaatselt ja ilma, et skripti käivitanud kasutaja teaks.

./myscript.sh

Skripti iseseisvaks käitamiseks peavad olema täidetud 2 tingimust:

1) stsenaarium peab sisaldama "paukjoont". See on skripti esimene rida, mis peab algama tähemärkidega #! ja et peate määrama tee, kus tõlk asub. Oluline on märkida, et see tingimus kehtib mis tahes tüüpi skriptide (python, perl jne), mitte ainult bashi skriptide puhul.

Näiteks peaks meie skript sisaldama esimese reana järgmist:

#! / bin / bash

2) failil peavad olema õigused:

Skriptile täitmisõiguste andmiseks peame kirjutama:

chmod a + x vale.sh

Valmis, nüüd käivitage see lihtsalt järgmiselt:

./myscript.sh

Või kopeerides skripti "spetsiaalsele" teele, mis võimaldab seda hõlpsalt kasutada. Näiteks võime selle kopeerida kausta / usr / sbin ja käivitada kõikjalt, lisamata kogu tee, kus see asub:

Kopeerime:

sudo cp miscript.sh / usr / sbin / miscript

Teostame:

valesti kirjutatud

Nagu näete, on tegelikkuses kulisside taga toimuv mõlemal juhul väga sarnane. Kui lisada "paukjoon", on teie skripte palju lihtsam levitada, kuna kasutajad ei pea nende käivitamiseks meeles pidama vajalike tõlkide asukohta. Järeldus: küsimus on põhimõtteliselt mugavuses.


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   Oswaldo Villarroel DIJO

    Nõustun teiega Erpoweriga, nii tõlgi versioon kui ka selle tee on muutlikud ja mitte konstantsed, veelgi enam, kui leitakse, et GNU / Linuxi distributsioonid pole ainsad, mis kasutavad Bashi (on ka: freeBSD, OpenSolaris, Mac) ja paljud neist on erineva konfiguratsiooni või marsruudiga.

    Oluline on teada, et teil on paindlikkus (nagu mainisite) skriptikutsega mängimiseks kas ./ või sh (või python ... jne)

  2.   he_who_knows@gmail.com DIJO

    Bash on arvutiprogramm, mille ülesandeks on tellimuste tõlgendamine.

    See põhineb Unixi kestal ja ühildub POSIX-iga.

    selle asemel on sh arvutiprogramm, mille ülesandeks on tellimuste tõlgendamine.
    Sisaldab selliseid funktsioone nagu protsessi juhtimine, ümbersuunamine
    sisend / väljund, failide loetelu ja lugemine, kaitse,
    side ja käsukeel programmide kirjutamiseks
    partiid või skripte. See oli tõlk, mida kasutati Unixi esimestes versioonides ja sellest sai de facto standard.

  3.   Diana C. DIJO

    Tere, olen skriptide kasutamisel algaja ja sooviksin teada, kas keegi saab mind aidata probleemiga, mis mul on:

    Ma haldan programmi, mis nõuab konsooli kaudu mitme algandme lisamist ja sain teada, et skripti kaudu on võimalik programmi käivitada algandmetega, et seda ei peaks korduvalt kirjutama, kui mul on vaja programmi käivitada.

    Ma ei tea, kuidas seda teha, nii et kui keegi mind selles osas aidata saab, olen väga tänulik.

  4.   Kasutame Linuxi DIJO

    Vaadake, see sõltub sellest, millises programmeerimiskeeles skripti kirjutate. Kuid igal juhul on vaja:

    1) Kui soovite, et kasutaja peaks skripti käivitamisel need andmed sisestama, on kõige tavalisem protseduur, et muutuja võtab sisendisse sisestatud väärtused.

    2) Juhul kui väärtused on alati samad, võite kasutada konstante.

    3) Teine võimalus on võimalus, et teie skript võib võtta parameetreid.

    Terviseks! Paul.

  5.   Kasutame Linuxi DIJO

    See on huvitav, mida te mainite. Seda nimetatakse kaheks vormiks: shebangi joon või otseselt paugu joon. Edastan teile andmed: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Terviseks! Paul.

  6.   @llomellamomario DIJO

    Huvitav, ma polnud kunagi peatunud selle detaili üle mõtlemas. Oleks huvitav näha rohkem artikleid konsoler retušeerimise kohta, sealhulgas kuulsat tuuma ümberkompileerimist, et eemaldada tarbetud kilo koode, mis on olemas ainult ühilduvuse ja süsteemi kiiruse parandamiseks.

  7.   Kasutame Linuxi DIJO

    OKEI. Pean seda silmas.
    Terviseks! Paul.

  8.   Kasutame Linuxi DIJO

    Mul on hea meel, et see õnnestus. Püüan alati postitada asju, mis minu arvates võivad olla huvitavad ja praktilised.
    Kallistus! Paul.

  9.   Felix Manuel Brito Amarante DIJO

    Iga heade harjumustega programmeerija lisab koodirea esimesse ritta "paugurea". Pythonis ei unusta ma kunagi kodeerimist ja paugujooni.
    #! / usr / bin / python2.7
    # *. * kodeering = utf-8 *. *

  10.   diex02 DIJO

    Suurepärane, ma loodan, et saate avaldada käsurea kohta rohkem teavet, eriti lähtekoodifailidest (tar.gz jne) koostamise või installimise kohta.

  11.   joe di castro DIJO

    Ma polnud kunagi kuulnud "pauguliinist". Olen seda alati tundnud kui Shebang

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

    seoses

  12.   Jonathan Fernandez DIJO

    huvitav märkus ... aitäh!

  13.   eM Öelge eM DIJO

    Kui huvitav, kuulutan end programmeerimise ja kõige skriptiga seonduva osas täiesti võhikuks, mul polnud aimugi, kuidas see töötab, kuid olen märganud, et mõnel on see päis.

  14.   Mario raimondi DIJO

    Minuga juhtunud täpsustus, mis on seotud selle postitusega: tahtsin installida Adobe air vidina (pokkeri koefitsientide kalkulaator). Mida Adobe Airi installer teeb, käivitab vastava skripti "su" -ga, kuid kujul ./, paludes teil juurparooli. Kuna skriptil puudusid käivitamisõigused, viskas see luba keelatud, lahendus: käivitage skript sh-ga, kui te ei soovi õigusi muuta (kiiremini kui tmp chmod kausta ja kõik muu). Seal käivitatakse skript, see kutsub Adobe'i installeri ja veel ühe liblika asja.

  15.   ero-sennin DIJO

    Väga huvitav artikkel! Täname, et aitasite mul konsooli kohta veidi rohkem teada saada. Vaatame, kas jätkate selliste artiklite avaldamist ^ ^.
    Jätka, see on kahtlemata minu lemmikblogi !!

  16.   erpower DIJO

    Tuleb märkida, et tõlgendatavate versioonide vahel võib olla erinevusi. Skripti otse shebangi järgi käivitades pole võimalik näidata, millist tõlgi versiooni kasutada, mis võib olla vajalik. Kui käivitate selle asemel tõlgi ja edastate skripti parameetrina, teate, milline selle versioon töötab.

    Näiteks kui Pythonis on shebang #! / Usr / bin / python2.4, käivitab programm teisiti kui #! / Usr / bin / python2.6 või kui see on #! / Usr / bin / python (mis on tavaliselt sümboolne link Pythoni versioonile, mis on vaikimisi installitud ja konfigureeritud). See juhtub seetõttu, et Python 2.6-l on uus funktsionaalsus, mida Python 2.4-s ei olnud, seega nurjub skripti kirjutamine, mis kasutab seda funktsiooni #! / Usr / bin / python shebang, kui süsteemile on installitud ainult python 2.4. Selle asemel võite alati sundida skripti käivitama soovitud pythoni versiooniga, alustades seda käskudega "python2.4 /path/al/script.py" või "python2.6 /path/al/script.py /

    Shelliskriptide puhul on ka kasutatavate kestade vahel erinevusi, nii et #! / Bin / sh ja #! / Bin / bash kasutamisel võivad skriptist sõltuvalt olla erinevad tulemused. Kui kirjutate skripti funktsioone kasutades, mis eksisteerivad ainult bashis, kuid osutate shebangile #! / Bin / sh, töötab teie skript tõenäoliselt Linuxis (enamikus distributsioonides on bin / sh sümboolne link bashile), kuid tõenäoliselt ebaõnnestub see muud UNIX-id, kus bashi pole installitud või kus / bin / sh ei ole sümboolne link saidile / bin / bash.

    Ka kaasaskantavusega seoses tuleb arvestada, et shebangis näidatud tee on absoluutne ja on olukordi, kus tõlke paigaldatakse teistesse kohtadesse. Näiteks on tavaline, et pythoni tõlk on installitud kataloogi / usr / local / bin / python, kui olete oma jaotusest paketi kasutamise asemel Pythoni alla laadinud ja kompileerinud. Kui teie shebang on #! / Usr / bin / python, ei tööta skript neis süsteemides. Nende probleemide vältimiseks võite kasutada seebangina "#! / Usr / bin / env python" (või "#! / Usr / bin / env sh"), nagu on selgitatud http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Kasutame Linuxi DIJO

    Aitäh Jonathan! Hea näha, et kommenteerite!
    Terviseks! Paul.

  18.   Antonio DIJO

    Kusagil ei tee see, mida ma tahan teada, või vähemalt ma ei tea, kuidas seda otsingumootorisse panna, tahan luua skripti, mis põhjusel, et xX täidab käsu aptitude või «su» (see on ainult näide, on kaks juhtumit Ma oskan mõelda) ja sobivuse korral palub see mul mõnikord sisestada "yon" või "su" -sse küsib parooli ... Ma tahaksin, et skript valiks need valikud automaatselt kas parameetri edastamise või mõne meetodi abil, mida ta ei tea ... . Täname tähelepanu eest

    1.    kasutame linuxi DIJO

      Tere, Antonio! Kui teie probleem on parooli sisestamine, siis ma arvan, et pole lahendust. Just seetõttu, et see on turvameede, nii et kõik ei saa programmi installida.
      Seoses sobivusega ja jah-sõna panemisega arvan, et selle saab lahendada. Ma ei mäleta praegu täpset parameetrit, mida kasutada, aga uuri seda lihtsalt man-lehtedelt. Avage terminal ja sisestage käsk: man aptitude.
      Kallistama! Paul.

  19.   David M.M. DIJO

    Väga hea postitus.
    Eriti meeldis mulle - selles postituses -, et tekkivale küsimusele / kahtlusele vastatakse väga selgelt ja lühidalt.