Jeg brukte bare mye tid på å lese meg opp på innlogging og interaktive skjell og hvorfor man burde eller ikke skulle sette miljø variabler, skallfunksjoner osv. i de forskjellige profil- og bashrc-filene. I dette innlegget ble det nevnt at bash-spesifikke ting som spørsmålsvalg skulle settes i ~ / .bashrc. Det fikk meg til å lure på PS1-variabelen. I alle eksemplene jeg har sett angående dette, har de noe sånt som export PS1="". Skal dette virkelig eksporteres til miljøet siden det bare har betydning for bash? Bare å ha PS1="" i min ~ / .bashrc produserer den tiltenkte effekten for meg, men jeg lurer på om jeg savner noe.

Svar

Det er riktig: PS1 er bare meningsfullt i interaktive forekomster av bash, så det bør settes i ~/.bashrc og skal ikke eksporteres. PS1 er også meningsfull i andre skjell, men det har en annen betydning, fordi raske utvidelser varierer mellom skjell. Faktisk, selv mellom forekomster av bash, kan PS1 ha forskjellige betydninger, siden betydningen avhenger av skallalternativer (minst promptvars).

Eksport av PS1 til miljøet fra .profile er en tilbakevending til 1970-tallet, da det bare var ett skall som brukte den (Bourne-skallet) og den hadde ikke en konfigurasjonsfil. Det fungerer fortsatt i dag hvis du alltid bruker det samme skallet og aldri konfigurerer det annerledes. Men alle moderne skjell som ikke er designet utelukkende for skripting (csh, ksh , bash, zsh, …) les en konfigurasjonsfil når den startes interaktivt (.cshrc, .kshrc, .bashrc, .zshrc, …), så 1970-metoden er ikke lenger nødvendig. Hvis du setter PS1 og andre skallspesifikke innstillinger i en skallspesifikk fil, og ikke eksporterer den til miljøet, unngår du å ødelegge ting når du bruker en annen skallkonfigurasjon eller et annet skall eller en annen terminal som ikke kan vise din vanlige hurtige fantasi. Innstilling av PS1 i en skallspesifikk fil fungerer hele tiden, mens innstilling av den i .profile og eksportere den fungerer bare i «enkle» tilfeller, så det er ingen grunn til ikke å gjøre det på riktig måte, men det er mange dårlige opplæringsprogrammer rundt på nettet og til og med dårlige standardkonfigurasjoner i distribusjoner. C «est la vie .

Kommentarer

  • Hvordan eksporterer PS1 fra .profile arbeide for bash-skjell som ikke er pålogget, siden de ikke ville ' t kilde det? Sier du at dette ville fungere fordi den ikke- påloggingsskall vil bli forked fra et påloggingsskall, så ville arve PS1 gjennom miljøet?
  • @MikeSweeney ja, at ' s hvorfor det ' s eksporteres .
  • En måte som feil idé sprer seg om å eksportere PS1, er å se if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi – som ofte vises hos mennesker ' s .bashrc-filer for bare å laste inn ting som kommandofullføring hvis dette er en bruker ' s interaktive terminal skall. Så ser det fungere der, den samme logikken vinder opp i skallskripter, derav " trenger " for å eksportere den. I stedet bør vi sjekke inn teraktive / terminalbrukere med tty -s eller test -t 0.
  • @DouglasDD Faktisk. PS1 -testen har for eksempel vært i Debian ' s /etc/profile. Jeg vet ikke ' hvor denne dårlige praksisen oppsto. Jeg mistenker at det kom fra en bestemt brukssak (kanskje å oppdage rlogin eller ssh-pålogginger?) Der det tilfeldigvis fungerte. Dessverre mislykkes det i mange andre tilfeller, derav de mange spørsmålene om dette emnet her og andre steder.
  • @Gilles skal vi ikke eksportere CLICOLOR og LS_COLORS heller? @DouglasDD betyr det at if [[-z $p1]];then return fi sjekken i .bashrc er feil?

Legg igjen en kommentar

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