Mi a különbség a bash szkript futtatása között sh és ./ használatával

Ugyanez a kérdés merülhet fel, ha bármilyen típusú szkriptet használunk, nem csak a bash-t. Van-e nagy különbség a szkript tolmácson keresztüli futtatása és közvetlen futtatása között?

Még egy rejtély, amelyet felfedünk ebben a Hasznos Linux (uL) érdekes bejegyzésében.


Amikor egy szkriptet úgy futtat, hogy a szkript fájlnevét tolmácsnak továbbítja (sh, python, perl stb.), Akkor az értelmezőt futtatja, argumentumként átadva a futtatni kívánt programot. Például az sh tolmácsot a miscript.sh argumentum átadásával futtatjuk.

sh myscript.sh

Ha önállóan futtatja a parancsfájlt, a rendszer felhívja a szükséges tolmácsot, majd igen, végrehajtja a parancsfájlt, argumentumként továbbítva az értelmezőnek, de mindezt automatikusan és anélkül, hogy a parancsfájlt végrehajtó felhasználó tudná.

./myscript.sh

A szkript futtatásához 2 feltételnek kell teljesülnie:

1) a szkriptnek tartalmaznia kell egy "bumm vonalat". Ez egy szkript első sora, amelynek a #! Karakterrel kell kezdődnie. és meg kell adnia azt az útvonalat, ahol a tolmács található. Fontos megjegyezni, hogy ez a feltétel bármilyen típusú szkriptre (python, perl stb.) Igaz, nem csak a bash-ból.

Így például a szkriptünknek az alábbiakat kell tartalmaznia első sorként:

#! / bin / bash

2) a fájlnak végrehajtási engedélyekkel kell rendelkeznie:

A szkriptünk végrehajtási engedélyeinek megadásához a következőket kell írnunk:

chmod a + x hibás.sh

Kész, most futtassa csak így:

./myscript.sh

Vagy másolja át a szkriptet egy "speciális" útvonalra, amely lehetővé teszi annak egyszerű hívását. Például átmásolhatjuk az / usr / sbin fájlba, és bárhonnan futtathatjuk, a teljes elérési út megadása nélkül, ahol található:

Másoljuk:

sudo cp miscript.sh / usr / sbin / miscript

Végrehajtjuk:

tévesen

Mint látható, a valóságban a kulisszák mögött zajló események mindkét esetben nagyon hasonlóak. A "bang line" hozzáadásával azonban a szkriptek sokkal könnyebben terjeszthetők, mivel a felhasználóknak nem kell emlékezniük arra az útra, ahol a szükséges tolmácsok találhatók. Következtetés: alapvetően a kényelem kérdése.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Oswaldo Villarroel dijo

    Egyetértek veled, Erpower, mind az értelmező verziója, mind az útvonala változó és nem állandó, még inkább, ha úgy gondoljuk, hogy nem csak a GNU / Linux disztribúciók használják a Bash-ot (vannak még: freeBSD, OpenSolaris , Mac), és sokuknak különböző konfigurációja vagy útvonala van.

    A legfontosabb az, hogy tudd, hogy van rugalmasságod (amint azt jól említetted) a szkript meghívásával játszani, akár a ./, akár az sh (vagy a python ... stb.)

  2.   he_who_knows@gmail.com dijo

    A Bash egy számítógépes program, amelynek feladata a megrendelések értelmezése.

    Unix shell-en alapul, és POSIX-kompatibilis.

    ehelyett az sh egy számítógépes program, amelynek feladata a megrendelések értelmezése.
    Olyan funkciókat tartalmaz, mint a folyamatirányítás, az átirányítás
    bevitel / kimenet, fájlok felsorolása és olvasása, védelem,
    kommunikáció és parancsnyelv a programok írásához
    kötegek vagy szkriptek. Ez volt a tolmács, amelyet az Unix első verzióiban használtak, és de facto szabvány lett.

  3.   Diana C. dijo

    Helló, kezdő vagyok a szkriptek használatában, és szeretném tudni, hogy tud-e valaki segíteni nekem egy problémámban:

    Olyan programot irányítok, amely több kezdeti adat felvételét igényli a konzolon keresztül, és rájöttem, hogy egy szkript segítségével lehetséges a program végrehajtása a kezdeti adatokkal, hogy ne kelljen újra és újra írni, amikor futtatni kell a programot.

    Nem tudom, hogyan kell csinálni, ezért ha valaki tud ebben segíteni, akkor nagyon hálás leszek.

  4.   Használjuk a Linuxot dijo

    Nézze, ez attól függ, hogy milyen programozási nyelven írja a szkriptet. Mindazonáltal amire szüksége van:

    1) Ha azt szeretné, hogy a felhasználónak a parancsfájl végrehajtásakor meg kell adnia ezeket az adatokat, a leggyakoribb eljárás az, hogy egy változó a bemenetbe beírt értékeket veszi fel.

    2) Abban az esetben, ha az értékek mindig megegyeznek, használhat konstansokat.

    3) Egy másik lehetőség az a lehetőség, hogy a szkript paramétereket vehet fel.

    Egészségére! Pál.

  5.   Használjuk a Linuxot dijo

    Érdekes, amit megemlít. A 2 formából hívják: sebbang vonal vagy közvetlenül bumm vonal. Átadom neked az adatokat: http://python.about.com/od/programmingglossary/g/defbangline.htm
    Egészségére! Pál.

  6.   @llomellamomario dijo

    Érdekes, hogy soha nem álltam meg, hogy ezen a részleten gondolkodjak. Érdekes lenne több cikket látni a consoler retusálásról, köztük a híres rendszermag újrafordításáról, hogy eltávolítsuk a felesleges kilók kódot, amelyek csak a kompatibilitás és a rendszer sebességének javítása érdekében vannak.

  7.   Használjuk a Linuxot dijo

    OKÉ. Ezt szem előtt tartom.
    Egészségére! Pál.

  8.   Használjuk a Linuxot dijo

    Örülök, hogy sikerült. Mindig megpróbálok olyan dolgokat feltenni, amelyek szerintem érdekesek és praktikusak lehetnek.
    Egy ölelés! Pál.

  9.   Felix Manuel Brito Amarante dijo

    Minden jó szokásokkal rendelkező programozó hozzáad egy "bumm sort" az első kódsorhoz. A Pythonban soha nem felejtem el a kódolást és a bumm sort.
    #! / usr / bin / python2.7
    # *. * kódolás = utf-8 *. *

  10.   diex02 dijo

    Kiváló, remélhetőleg több információt tehet közzé a parancssorról, különösen a forrásfájlokból (tar.gz stb.) Történő fordítás vagy telepítés során.

  11.   joe di castro dijo

    Soha nem hallottam a "bumm vonalról", mindig is Shebang néven ismertem

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

    Üdvözlet

  12.   Jonathan Fernandez dijo

    érdekes megjegyzés ... köszönöm!

  13.   eM Mondd eM dijo

    Milyen érdekes, teljesen tudatlannak nyilvánítom magam a programozásban és a szkriptekkel kapcsolatos mindenben, fogalmam sem volt, hogyan működik, de azt vettem észre, hogy egyeseknek van ilyen fejlécük.

  14.   Mario raimondi dijo

    A velem történt pontosítás, ami ehhez a bejegyzéshez kapcsolódik: Szerettem volna telepíteni egy vályog levegő modult (póker odds kalkulátort). Az Adobe Air telepítője a megfelelő szkriptet "su" betűvel futtatja, de a ./ formátumban kéri a root jelszót. Mivel a szkript nem rendelkezett végrehajtási jogosultságokkal, ezért megtagadta az engedélyt, a megoldást: futtassa a szkriptet sh-vel, ha nem akarja megváltoztatni az engedélyeket (gyorsabban, mint a tmp chmod mappába és mindezekhez). A parancsfájl végrehajtásra kerül, meghívja az Adobe telepítőjét és egy másik pillangó dolgot.

  15.   ero-sennin dijo

    Nagyon érdekes cikk! Köszönöm, hogy segített nekem egy kicsit többet megtudni a konzolról. Lássuk, továbbra is publikál-e ilyen cikkeket ^^.
    Csak így tovább, ez kétségtelenül a kedvenc blogom !!

  16.   erpower dijo

    Ne feledje, hogy lehetnek különbségek a tolmács használt verziói között. A szkript közvetlen futtatása a shebang szerint nem tudja jelezni, hogy a tolmács melyik verzióját használja, ami szükséges lehet. Ha az értelmezőt futtatja, és paraméterként adja át a parancsfájlt, akkor tudja, hogy annak melyik verziója fut.

    Például a Pythonban, ha a shebang #! / Usr / bin / python2.4, akkor a program másképp fog futni, mint ha #! / Usr / bin / python2.6 vagy #! / Usr / bin / python (amely általában szimbolikus link a Python alapértelmezés szerint telepített és konfigurált verziójához). Ez azért történik, mert a Python 2.6 olyan új funkcionalitással rendelkezik, amely nem létezett a Python 2.4-ben, ezért a #! / Usr / bin / python shebang jelzésével ezt a funkciót használó szkript megírása sikertelen lesz, ha a rendszerbe csak a Python 2.4 telepítve van. Ehelyett bármikor kényszerítheti a parancsfájlt a kívánt python verzióval történő futtatásra, ha a következőt kezdi: "python2.4 /path/al/script.py" vagy "python2.6 /path/al/script.py/

    A shell szkriptek esetében a használt héjak között is vannak különbségek, így a #! / Bin / sh és #! / Bin / bash használatával a szkripttől függően különböző eredmények érhetők el. Ha csak a bash-ban létező funkciókkal írsz szkriptet, de megadsz egy #! / Bin / sh shebang-ot, akkor a szkript valószínűleg Linuxon fog működni (a legtöbb disztribúciónál a bin / sh szimbolikus link a bash-hoz), de valószínűleg nem fog sikerülni más UNIX-okban, ahol a bash nincs telepítve, vagy ahol a / bin / sh nem szimbolikus link a / bin / bash-ra.

    A hordozhatósággal kapcsolatban is figyelembe kell venni, hogy a shebangban jelölt útvonal abszolút, és van, amikor a tolmácsokat más helyekre telepítik. Például gyakran előfordul, hogy a python tolmács a / usr / local / bin / python könyvtárba van telepítve, ha a Python-ot letöltötted és lefordítottad ahelyett, hogy a terjesztésedből csomagot használtál volna. Ha a shebang értéke #! / Usr / bin / python, akkor a szkript nem fog működni ezeken a rendszereken. E problémák elkerülése érdekében használhatja a "#! / Usr / bin / env python" (vagy "#! / Usr / bin / env sh") shebang néven, amint azt a http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Használjuk a Linuxot dijo

    Köszönöm Jonathan! Örülök, hogy kommentelsz!
    Egészségére! Pál.

  18.   antonio dijo

    Sehol nem csinálom, amit tudni akarok, vagy legalábbis nem tudom, hogyan emeljem fel a keresőben, szeretnék létrehozni egy szkriptet, amely okból xX végrehajtja az aptitude vagy a «su» parancsot (ez csak egy példa, de ezek a 2 eset, amire gondolni tudok), és alkalmasság esetén néha arra kér, hogy írjam be a "yon" szót, vagy a "su" -ba kér tőlem jelszót ... szeretném, ha a szkript kiválasztaná ezeket az opciókat automatikusan átad egy paramétert, vagy olyan módszert használ, amelyet nem ismer .... Köszönöm a figyelmet

    1.    használjuk a linuxot dijo

      Szia Antonio! Ha a problémád a jelszó megadása, nem hiszem, hogy van megoldás. Pontosan azért, mert biztonsági intézkedésről van szó, így nem mindenki tudja telepíteni a programot.
      Ami az alkalmasságot és az igennel kapcsolatos kérdést illeti, szerintem megoldható. Ezen a ponton nem emlékszem a pontos paraméterre, de csak a man oldalakon találja meg. Nyisson meg egy terminált, és írja be a következő parancsot: man aptitude.
      Ölelés! Pál.

  19.   Dávid MM dijo

    Nagyon jó poszt.
    Különösen tetszett - ebben a bejegyzésben -, hogy a felmerülő kérdésre / kétségre nagyon egyértelműen és tömören válaszolunk.