Mitä eroa on #!/ bin / sh ja #!bin bash?

Linuxissa ja muissa Unixin kaltaisissa järjestelmissä on valittavana useita kuoria.

komentotulkki ei ole vastuussa vain pienen kehotuksen piirtämisestä, vaan komentojesi tulkitsemisesta, varsinkin jos käytät monimutkaista logiikkaa, kuten putkia, ehdollisuuksia ja niin edelleen.

bash on yleisin Linux-järjestelmien käyttäjien oletustulkkina käytetty kuori. Se on hengellinen jälkeläinen muiden kuoret käytetty koko Unix historiassa. Sen nimi, bash on lyhenne Bourne-jälleen Shell, kunnianosoitus Bourne shell se oli suunniteltu korvaamaan, vaikka se sisältää myös ominaisuuksia C Shell ja Korn Shell.

It ’ s run, these days, from /bin/bash – any system with bash will have it accessible here.

kuoria käyttävät kuitenkin muutkin kuin käyttäjät. Komentosarjat (shell-komentosarjat) tarvitsevat kuoria tulkitakseen niitä. Kun suoritat komentotulkin komentosarjan, järjestelmän on käynnistettävä komentotulkkiprosessi komentosarjan suorittamiseksi.

ongelmana on, että eri kuorissa on pieniä pieniä epäjohdonmukaisuuksia niiden välillä, ja skriptien ajamisessa nämä voivat olla todellinen ongelma. Bashissa on melko paljon skriptausominaisuuksia, jotka ovat ainutlaatuisia vain bashille, eivätkä muille kuorille. Tämä on hyvä, jos käytät aina bashia Käsikirjoitusten ajamiseen. Muut kuoret voivat yrittää joko jäljitellä bashia tai noudattaa POSIX-standardia, jota bash tukee melko hyvin (vaikka lisää siihen omat laajennuksensa).

on mahdollista määrittää komentotulkin komentotulkin yläreunassa, millä komentotulkilla se tulisi suorittaa käyttäen shebangia. Skripti voi määritellä #!/bin/bash ensimmäisellä rivillä, mikä tarkoittaa, että skripti tulisi aina ajaa bashilla eikä toisella komentotulkilla.

/bin / sh on suoritustiedosto, joka edustaa järjestelmän komentotulkkia. Itse asiassa se toteutetaan yleensä symbolisena linkkinä, joka osoittaa suoritustiedostoon sen mukaan, kumpi komentotulkki on järjestelmän komentotulkki. Järjestelmän komentotulkki on eräänlainen oletus komentotulkki, jota järjestelmän komentosarjojen tulisi käyttää. Linux-jakeluissa tämä oli pitkään yleensä symbolinen linkki bashiin, siinä määrin, että on tullut jokseenkin tavaksi aina linkittää /bin/sh bashiin tai bash-yhteensopivaan komentotulkkiin. Kuitenkin parin viime vuoden aikana Debian (ja Ubuntu) päätti vaihtaa järjestelmän komentotulkin bashista Dashiin – samanlaiseen komentotulkin rikkomiseen, jolla on pitkä perinne Linuxissa (no, GNU) käyttää bash for /bin/sh. Dash nähdään kevyempi, ja paljon nopeampi, kuori, joka voi olla hyödyllistä käynnistää nopeus (ja muita asioita, jotka vaativat paljon shell skriptejä, kuten paketti asennus skriptejä).

Dash on melko hyvin yhteensopiva Bashin kanssa, sillä se perustuu samaan POSIX-standardiin. Se ei kuitenkaan toteuta bash-spesifisiä laajennuksia. On olemassa skriptejä ,jotka käyttävät #!/bin/sh (järjestelmän komentotulkki) shebanginaan, mutta jotka vaativat bash-spesifisiä laajennuksia. Tätä pidetään tällä hetkellä bugina, joka Debianin ja Ubuntun pitäisi korjata, koska ne vaativat /bin/sh: n pystyvän toimimaan, kun Dash on merkitty.

vaikka Ubuntun järjestelmäkuori osoittaakin Dashiin, kirjautumistulkkisi käyttäjänä on tällä hetkellä edelleen bash. Toisin sanoen, Kun kirjaudut pääte-emulaattoriin missä tahansa Linuxissa, login shell on bash. Toiminnan nopeus ei ole niinkään ongelma, kun komentotulkkia käytetään interaktiivisesti, ja käyttäjät tuntevat Bashin (ja heillä voi olla bash-erityisiä mukautuksia kotihakemistossaan).

mitä sinun tulisi käyttää kirjoitettaessa skriptejä

jos skriptisi vaatii vain Bashin tukemia ominaisuuksia, Käytä #!/bin/bash.

mutta jos suinkin mahdollista, olisi hyvä varmistaa, että skriptisi on POSIX-yhteensopiva, ja käyttää #!/bin/sh: ää, jonka pitäisi aina, melko luotettavasti, osoittaa missä tahansa asennuksessa ensisijainen POSIX-yhteensopiva järjestelmäkuori.

Vastaa

Sähköpostiosoitettasi ei julkaista.