Jeg brugte bare meget tid på at læse på login og interaktive skaller, og hvorfor man skulle eller ikke skulle indstille miljø variabler, shell-funktioner osv. i de forskellige profil- og bashrc-filer. I dette indlæg blev det nævnt, at bash-specifikke ting som hurtigindstillinger skulle indstilles i ~ / .bashrc. Det fik mig til at undre mig over PS1-variablen. I alle de eksempler, jeg har set angående dette, har de noget som export PS1="". Skal dette virkelig eksporteres til miljøet, da det kun har betydning for bash? Bare at have PS1="" i min ~ / .bashrc producerer den tilsigtede effekt for mig, men jeg spekulerer på, om jeg mangler noget.

Svar

Det er korrekt: PS1 er kun meningsfuldt i interaktive forekomster af bash, så det skal indstilles i ~/.bashrc og bør ikke eksporteres. PS1 er også meningsfuld i andre skaller, men det har en anden betydning, fordi hurtige udvidelser adskiller sig mellem skaller. Faktisk, selv mellem forekomster af bash, kan PS1 have forskellige betydninger, da betydningen afhænger af shell-indstillinger (mindst promptvars).

Eksport af PS1 til miljøet fra .profile er et tilbagevenden til 1970erne, da der kun var en skal, der brugte den (Bourne-skallen), og den havde ikke en konfigurationsfil. Den fungerer stadig i dag, hvis du altid bruger den samme skal og aldrig konfigurerer den anderledes. Men alle moderne skaller, der ikke er designet udelukkende til scripting (csh, ksh , bash, zsh, …) læs en konfigurationsfil, når den startes interaktivt (.cshrc, .kshrc, .bashrc, .zshrc,…), så 1970-metoden er ikke længere nødvendig. Indstilling af PS1 og andre shell-specifikke indstillinger i en shell-specifik fil og ikke eksporteres til miljøet, undgår at bryde ting, når du bruger en anden shell-konfiguration eller en anden shell eller en en anden terminal, der ikke er i stand til at vise din sædvanlige hurtige fanciness. Indstilling af PS1 i en shell-specifik fil fungerer hele tiden, mens indstilling af den i .profile og eksport af det fungerer kun i “enkle” tilfælde, så der er ingen grund til ikke at gøre det på den rigtige måde, men der er masser af dårlige tutorials på nettet og endda dårlige standardkonfigurationer i distributioner. C “est la vie .

Kommentarer

  • Hvordan eksporterer PS1 fra .profile arbejder for bash-skaller, der ikke er logget ind, da de ikke ville ' t kilde det? Siger du, at dette ville fungere, fordi den ikke- login shell ville blive forked fra en login shell, så ville arve PS1 gennem miljøet?
  • @MikeSweeney ja, at ' s hvorfor det ' s eksporteres .
  • En måde, som den forkerte idé spreder om eksport af PS1, er at se if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi – som ofte vises hos mennesker ' s .bashrc-filer for kun at indlæse ting som kommandofuldførelse, hvis dette er en bruger ' s interaktive terminalskal. Så når den ser det arbejde der, vinder den samme logik i shell-scripts, hvorfor " har brug for " for at eksportere det. I stedet for skal vi tjekke ind teraktive / terminalbrugere med tty -s eller test -t 0.
  • @DouglasDD Faktisk. Testen PS1 har været i Debian ' s /etc/profile i årevis. Jeg ved ikke ' hvor denne dårlige praksis opstod. Jeg formoder, at det kom fra en bestemt brugssag (måske detektering af rlogin- eller ssh-login?), Hvor det tilfældigvis fungerede. Desværre mislykkes det i mange andre tilfælde, derfor de mange spørgsmål om dette emne her og andre steder.
  • @Gilles hvis vi ikke eksporterer CLICOLOR og LS_COLORS enten? @DouglasDD betyder det, at if [[-z $p1]];then return fi afkrydsningsfeltet i min .bashrc er mangelfuld?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *