Paras vastaus
Kiitos A2A: sta.
Mielestäni Anmol Vishwakarma on antanut erinomaisen kuvauksen asia.
Vain varmistaaksemme, että asetamme asiat perspektiiviin:
- / etc / profile, ~ / .bash\_rc , ja ~ / .bash\_profile, ovat kaikki tiedostoja ja niitä kutsutaan c onfiguration-skripteiksi. Ne voivat sisältää muuttujailmoituksia, vientimuuttujia, sisäänkirjautumisen yhteydessä suoritettavia komentoja, kuten postin tai uutisten tarkistus, asettamalla mm. umask. Tyypillisiä asioita, joita käyttäjät tekevät, ovat: lisäämällä joitain dir tiedostoon $ PATH, viemällä muuttujaa, muuttamalla $ PS1, asettamalla näytön värejä, lisäämällä tervehdystekstiviestin jne.
- Kaikki nuo tiedostot paitsi / etc / profile, on oletuksena piilotettu, kuten etupiste merkitsee (joten se ei ole bash\_profile , mutta itse asiassa .bash\_profile ).
- Kun kirjaudut sisään (joko paikallisesti tai etänä), tätä kutsutaan kirjautumiskuoreksi ja sitä käsitellään vähän vähän erilainen kuin normaali kuoren kutsuminen. Siinä tapauksessa suoritetaan tiedosto / etc / profile , jos sellainen on, minkä jälkeen joko ~ /.bash\_profile tai ~ / .bashrc -tiedosto suoritetaan siinä järjestyksessä.
- Interaktiivisen kuoren eli jonka kanssa voit olla vuorovaikutuksessa, koska kuoren stdin ja stderr ovat molemmat TTY: t, ~ / .bash\_profile -tiedostoa ei suoriteta, mutta ~ / .bashrc on.
- Ei-vuorovaikutteisessa kuoressa, eli siinä, jossa on joko yksi tai molemmat stdin / stderr, ei ole TTY, määritysskriptiä ei suoriteta .
- Kirjautumishakemistossa uloskirjautumisen yhteydessä suoritetaan ~ / .bash\_logout -tiedosto, jos sellainen on.
- POSIXin mukaan stderr (eikä stdout ) on virta, joka määrittää, onko kuori vuorovaikutteinen. Jos stderr ohjataan uudelleen, se ei ole interaktiivinen kuori, ellei -i määritetä kuoren kutsuminen. vakiona ei ole samaa vaikutusta.
Vastaa
Se on vain minun mielipiteeni, mutta jos exit
kuoritoiminnon yhteydessä (joka lopettaa nykyisen shell-prosessin) oli sama kuin return
(joka palaa nykyinen toiminto), niin et voinut kirjoittaa koodia shell-toimintoon, joka sulkee nykyisen komentosarjan, kun funktion rungon koodi havaitsee kohtalokkaan tilan. Ajattele runtime-kutsuja assert()
(tai vastaavia) jäsennellymmillä ohjelmointikielillä.
Sen sijaan voit vain palauttaa virhekoodin soittajalle.
Totta, kohtalokkaista virheistä poistuminen äkillisesti ei todellakaan ole paras ohjelmointityyli (Subversionin libsvn
maine oli kerran erittäin huono tämän vuoksi: kirjaston koodi johti siihen, että ohjelma käytti sitä lopettamalla äkillisesti, jolloin kutsukoodilla ei ollut mahdollisuutta ilmoittaa käyttäjälle tai yrittää toipua virheestä).
On kuitenkin mahdollista poistua äkillisesti, kun havaitaan kohtalokkaita virheitä. melko käytännöllinen odotetuissa olosuhteissa toimivien ratkaisujen kehittämisessä – ja shell-ohjelmoinnissa (ja siten myös GNU Bash -ohjelmoinnissa) on aina ollut kyse lyhyitä käytännön ratkaisuja yleisiin tapauksiin eikä monimutkaisia ratkaisuja, jotka käsittelevät huolellisesti kaikkia mahdollisia erityispiirteitä l tapaus (siihen on paljon muita työkaluja / kieliä, olkoon se sitten C, Tcl, Perl, Python tai jopa PowerShell).
Huomaa myös, että todennäköinen syy miksi joku käyttää Bourne-komentosarjoja Ensinnäkin edellä mainittujen työkalujen / kielten käyttämisen sijasta johtuu siitä, että ensimmäisten käyttäminen on melko helppoa koota jotain, joka todella toimii, kuin jälkimmäisen käyttäminen – kerran oletettiin, että shell-komentosarjat antoivat käyttäjien käyttää melkein samaa syntaksia työkalut, joita he käyttivät vuorovaikutteisesti joka päivä, mikä oli heille jo tuttua.
Pyysit: Bashin sisäänrakennettu palautuskomento on tarkoitettu komentotulkkitoiminnot, mutta miksi komento exit ei riitä kuoritoimintoihin?