Jag tillbringade bara mycket tid på att läsa in på inloggnings- och interaktiva skal och varför man bör eller inte bör ställa in miljö variabler, skalfunktioner etc. i de olika profil- och bashrc-filerna. I detta inlägg nämndes det att bash-specifika saker som snabbalternativ skulle ställas in i ~ / .bashrc. Det fick mig att undra på PS1-variabeln. I alla exemplen jag har sett angående detta har de något som export PS1="". Borde detta verkligen exporteras till miljön eftersom det bara har betydelse för bash? Bara att ha PS1="" i min ~ / .bashrc ger den avsedda effekten för mig, men jag undrar om jag saknar något.

Svar

Det är korrekt: PS1 är endast meningsfullt i interaktiva fall av bash, så det bör ställas in i ~/.bashrc och bör inte exporteras. PS1 är också meningsfullt i andra skal, men det har en annan betydelse, eftersom snabba utvidgningar skiljer sig åt mellan skalen. Faktum är att även mellan instanser av bash kan PS1 ha olika betydelser, eftersom betydelsen beror på skalalternativ (minst promptvars).

Exportera PS1 till miljön från .profile är en återgång till 1970-talet, då det bara fanns ett skal som använde det (Bourne-skalet) och det hade ingen konfigurationsfil. Det fungerar fortfarande idag om du alltid använder samma skal och aldrig konfigurerar det annorlunda. Men alla moderna skal som inte är designade enbart för skript (csh, ksh , bash, zsh, …) läs en konfigurationsfil när den startas interaktivt (.cshrc, .kshrc, .bashrc, .zshrc, …), så 1970-metoden är inte längre nödvändig. Att ställa in PS1 och andra skalspecifika inställningar i en skalspecifik fil och inte exportera den till miljön, undviker att bryta saker när du använder en annan skalkonfiguration eller ett annat skal eller en annan terminal som inte kan visa din vanliga snabba fantasi. Att ställa in PS1 i en skalspecifik fil fungerar hela tiden, medan inställningen av den i .profile och exportera det fungerar bara i ”enkla” fall, så det finns ingen anledning att inte göra det på rätt sätt, men det finns gott om dåliga handledning på nätet och till och med dåliga standardkonfigurationer i distributioner. C ”est la vie .

Kommentarer

  • Hur exporterar PS1 från .profile fungerar för bash-skal som inte är inloggade eftersom de inte skulle ' t källa till det? Säger du att detta skulle fungera eftersom den icke- inloggningsskalet skulle gafflas från ett inloggningsskal så skulle ärva PS1 genom miljön?
  • @MikeSweeney ja, att ' s varför det ' s exporterades .
  • Ett sätt som fel idé sprids om att exportera PS1 är att se if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi – som ofta förekommer hos människor ' s .bashrc-filer för att bara ladda saker som kommandofullständighet om detta är en användare ' s interaktiva terminalskal. Så när det fungerar där, så växer samma logik upp i skalskript, så " behöver " för att exportera den. I stället bör vi checka in teraktiva / terminalanvändare med tty -s eller test -t 0.
  • @DouglasDD Faktiskt. Testet PS1 har varit i Debian ' s /etc/profile i åldrar, till exempel. Jag vet inte ' var den här dåliga praxis uppstod. Jag misstänker att det kom från ett särskilt användningsfall (kanske upptäckte rlogin eller ssh-inloggningar?) Där det råkade fungera. Tyvärr misslyckas det i många andra fall, därav de många frågorna om detta ämne här och på andra håll.
  • @Gilles ska vi inte exportera CLICOLOR och LS_COLORS antingen? @DouglasDD betyder det att if [[-z $p1]];then return fi kontrollen i min .bashrc är bristfällig?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *