Mikä on #! / Bin / bash shell-komentosarjoissa? Mitä eroa on / bin / sh ja / bin / bash välillä? Miksi komentosarjan komentosarja toimii joskus ilman viivoja?


Paras vastaus

#!/bin/bash

Tätä kutsutaan shebangiksi, se kertoo tulkkille, että seuraavat rivit on kirjoitettu bashille, joten suorita tämä tiedosto bash-komentosarjalla.

#Example: Scripts are usually executed like below:

./scriptName

Shebang määrittää siis komentosarjan tulkinnan, joskus se voi olla seuraava:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Joten nämä rivit määräävät, kuinka komentosarjojen tulisi toimia tulkita ja toteuttaa. nyt tulossa kohtaan Miksi /bin/sh?

Se osoittaa johonkin määritetystä kuoresta, joskus sh osoittaa kohtaan bash, joskus joku muu kuori, kuten cshell, dash,zsh ,ksh jne.

Esimerkki:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Joten jos käytät #!/bin/sh komentosarjassa, komentosarjan käyttäytyminen vaihtelee sen mukaan, mikä kuori sh osoittaa järjestelmääsi. Huomaa, että voit ohittaa shebangin suorittamalla komentosarjosi seuraavasti:

bash scriptName

#or

sh scriptName

Kahdessa edellä mainitussa tapauksessa shebang ei vaikuta suoritukseen, ja sen tekee bash ja sh (kuori osoittaa tähän).

Vastaa

No,” tarkalleen ”miten ne toimivat monia yksityiskohtia, joten olemme täällä melko epätarkkoja. Kaikki ohjelmat suoritetaan asettamalla koodinsa tiettyyn, omistettuun muistiosaan ja kutsumalla sitten kyseisen muistikoodikuvan alkupistettä. Sen jälkeen ohjelma vain juoksee.

Koodikuvan asettaminen muistiin suorittaa käyttöjärjestelmä, jota kutsutaan ohjelman käynnistämiseksi tai suorittamiseksi. Käyttöjärjestelmä tekee sen omasta aloitteestaan ​​vain kerran; käynnistyshetkellä, kun se käynnistää init -prosessin. init -prosessi ja sen jälkeläiset pyytävät käyttöjärjestelmää käynnistämään muita prosesseja kutsumalla exec Käyttöjärjestelmän kutsu.

Kuori on kerralla erityinen ja myös tavallinen. Se on vain toinen ohjelma, joka toimii, kuten kaikki muutkin. Sillä ei ole erityisiä supervoimia tai erityisominaisuuksia. Sen tarkoituksena on sallia käyttäjän pääsy käyttöjärjestelmän palveluihin, ensisijaisesti muiden käyttäjän määrittelemien ohjelmien käynnistämiseen. Se tarjoaa käyttäjälle helposti käytettävissä olevia menetelmiä, joiden avulla käyttäjä voi käyttää tiedostojärjestelmää ja määrittää, miten joitain tavallisia tietoliikennevirtoja käytetään ( stdin , stdout ja stderr ).

Kuoret tarjoavat ohjelmointikielen, jota voidaan käyttää tehdä asioita automatisoidusti, tehdä päätöksiä ja toistaa tehokkuuden lisäämiseksi, jotta he voivat toimia ilman käyttäjän vuorovaikutusta. Ne tarjoavat ja käyttävät erityistä syntaksia ja merkintöjä, jotka käyttäjän on opittava ja käytettävä kutsuttaakseen ohjelmointikielen ja komentorivinkäsittelyn. Kuorikomentojen käsittely voi tulla interaktiivisesta päätelaitteesta tai komentotiedostoja sisältävistä tekstitiedostoista.

Kuoren käynnistämiä ohjelmia kutsutaan kuoren aliprosesseiksi. Mikä tahansa prosessi voi käynnistää toisen prosessin, joten kuori ei ole siinä mielessä erityinen. Kuori on optimoitu, jotta käyttäjä voi määrittää, kuinka aliprosessit käynnistetään. Näet kaikkien Linux-isäntäkoneiden prosessien heirarkian komennolla

ps -e lf

Jostain luettelosta löydät itse ps -prosessi, ja se näkyy aloitusprosessina shell-prosessissa, jota käytit käynnistämään sen.

Siellä ovat huomattavasti enemmän yksityiskohtia; aivan liian monta kattamaan Quora-vastauksen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *