Hva er bash\_profile og hva er bruken?


Beste svaret

Takk for A2A.

Jeg tror Anmol Vishwakarma har gitt en utmerket beskrivelse på saken.

Bare for å sikre at vi setter ting i perspektiv:

  • / etc / profile, ~ / .bash\_rc , og ~ / .bash\_profile, er alle filer og kalles c skript for konfigurasjon. De kan inneholde variabelerklæringer, eksportvariabler, kommandoer som skal utføres ved pålogging, som e-post eller nyhetskontroll, blant annet å sette umask. Typiske ting brukerne gjør er: legge til litt dir til $ PATH, eksportere noen variabler, endre $ PS1, sette farger på skjermen, legge til en hilsen-tekstmelding osv.
  • Alle disse filene, bortsett fra / etc / profile, er som standard skjult, som angitt med den ledende prikken (så det er ikke bash\_profile men faktisk .bash\_profile ).
  • Når du logger inn (enten lokalt eller eksternt), kalles dette et påloggingsskall, og blir behandlet litt litt annerledes enn vanlig skallpåkallelse. I så fall kjøres / etc / profile -filen, hvis den er tilstede, hvorpå enten en ~ /.bash\_profile eller en ~ / .bashrc -fil kjøres, i den rekkefølgen.
  • For et interaktivt skall, dvs. den du kan samhandle med, fordi skallets stdin og stderr begge er TTYs, ~ / .bash\_profile filen kjøres ikke, men ~ / .bashrc er.
  • For et ikke-interaktivt skall, det vil si det med en eller begge stdin / stderr ikke er en TTY, utføres ingen konfigurasjonsskript .
  • I et påloggingsskall, ved utlogging, utføres en ~ / .bash\_logout -fil, hvis den er tilstede.
  • I henhold til POSIX, stderr (og ikke stdout ) er strømmen som avgjør om et skall er interaktivt. Hvis stderr blir omdirigert, er det ikke et interaktivt skall, med mindre -i er spesifisert i skallet påkallelse. stdout har ikke samme effekt.

Svar

Det er bare min mening, men hvis exit i sammenheng med en skallfunksjon (som avslutter den gjeldende skallprosessen) var den samme som en return (som returnerer fra gjeldende funksjon), da kunne du ikke skrive kode i en skallfunksjon som avslutter det aktuelle skriptet når en dødelig tilstand oppdages av koden i funksjonsdelen. Tenk på anrop til kjøretid assert() (eller ekvivalenter) på mer strukturerte programmeringsspråk.

Alt du kan gjøre i stedet er å returnere en feilkode til innringeren.

Det er sant at abrupt avslutning på fatale feil definitivt ikke er den beste programmeringsstilen (Subversions libsvn hadde en gang et veldig dårlig rykte på grunn av dette: fatale feil oppdaget i bibliotekets kode resulterte i at programmet brukte det med å avslutte brått, og det ga ingen sjanse til ringekoden for å varsle brukeren eller for å prøve å gjenopprette feilen.

Det er likevel mulig å avslutte brått når det oppdages dødelige feil er ganske praktisk i å utvikle løsninger som fungerer under forventede forhold – og shell-programmering (og dermed også GNU Bash-programmering) har alltid handlet om å tilby korte praktiske løsninger for vanlige saker, og ikke komplekse løsninger som håndterer alle mulige spesifikasjoner nøye I tilfelle (det er mange andre verktøy / språk for det, det være seg C, Tcl, Perl, Python eller til og med PowerShell).

Legg også merke til at den sannsynlige grunnen til at noen bruker Bourne shell-skript i det første stedet i stedet for å bruke de ovennevnte verktøyene / språkene, er fordi det å bruke førstnevnte er ganske lettere å sette sammen noe som faktisk fungerer nyttig enn å bruke sistnevnte – antagelsen en gang var at skallskripting tillot brukere å bruke nesten samme syntaks verktøy som de brukte interaktivt hver dag, og dermed noe de allerede var kjent med.

Du spurte: Den innebygde «return» -kommandoen i bash er for skallfunksjonene, men hvorfor er ikke «exit» -kommandoen tilstrekkelig for skallfunksjoner?

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *