Právě jsem strávil spoustu času čtením přihlašovacích a interaktivních skořápek a proč by člověk měl nebo neměl nastavovat prostředí proměnné, funkce prostředí atd. v různých souborech profilů a bashrc. V tomto příspěvku bylo zmíněno, že v ~ / .bashrc by měly být nastaveny věci specifické pro bash, jako jsou možnosti výzev. To mě vedlo k přemýšlení o proměnné PS1. Ve všech příkladech, které jsem v tomto ohledu viděl, mají něco jako export PS1=""
. Mělo by to být skutečně exportováno do prostředí, protože to má význam pouze pro bash? Stačí mít PS1=""
v mém ~ / .bashrc vytváří zamýšlený efekt pro mě, ale zajímalo by mě, jestli mi něco chybí.
Odpovědět
Správně: PS1
má smysl pouze v interaktivních případech bash, proto by měl být nastaven v ~/.bashrc
a neměl by být exportován. PS1
má smysl i v jiných skořápkách, ale má jiný význam, protože rychlé rozšíření se mezi skořápkami liší. Ve skutečnosti může mít PS1
dokonce i mezi instancemi bash různé významy, protože význam závisí na možnostech prostředí (alespoň promptvars
).
Export PS1
do prostředí z .profile
je návratem do 70. let, kdy existoval pouze jeden shell, který použil (shell Bourne) a neměl konfigurační soubor. Funguje to i dnes, pokud používáte vždy stejný shell a nikdy jej nekonfigurujete jinak. Všechny moderní shelly, které ale nejsou navrženy čistě pro skriptování (csh, ksh , bash, zsh,…) čte konfigurační soubor při interaktivním spuštění (.cshrc
, .kshrc
, .bashrc
, .zshrc
,…), takže metoda ze 70. let již není nutná. Nastavení PS1
a dalších nastavení specifických pro shell v souboru specifickém pro shell a jeho neexportování do prostředí zabrání rozbití věcí, když použijete jinou konfiguraci shellu nebo jiný shell nebo jiný terminál, který není schopen zobrazit vaši obvyklou rychlou fantazii. Nastavení PS1
v souboru specifickém pro prostředí funguje stále, zatímco jeho nastavení v .profile
a export funguje pouze v „jednoduchých“ případech, takže není důvod nedělat to správným způsobem, ale na webu existuje spousta špatných výukových programů a dokonce i špatné výchozí konfigurace v distribucích. C „est la vie .
Komentáře
- Jak probíhá export
PS1
from.profile
pracují pro nepřihlašovací bash skořápky, protože by je ' nezískali? Říkáte, že by to fungovalo, protože přihlašovací shell by byl vidlicový z přihlašovacího prostředí, takže by zdědilPS1
prostředí? - @MikeSweeney ano, že ' s proč je ' s exportován .
- Jedním ze způsobů, jak se šíří špatná myšlenka o exportu systému PS1, je vidět
if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi
– které se běžně objevují v souborech lidí ' s .bashrc, aby načetly věci jako dokončení příkazu, pouze pokud je to uživatel . Takže když to tam funguje, skončí stejná logika ve skriptech prostředí, a proto " potřebujete " exportovat. Místo toho bychom se měli zkontrolovat uživatelé teractive / terminálu stty -s
nebotest -t 0
. - @DouglasDD Skutečně. Například test
PS1
byl v Debianu ' s/etc/profile
. Nevím ', kde k tomuto špatnému postupu došlo. Mám podezření, že to přišlo z jednoho konkrétního případu použití (možná detekce přihlášení nebo ssh přihlášení?), Kde to náhodou fungovalo. Bohužel selhává v mnoha dalších případech, a proto mnoho otázek k tomuto tématu zde i jinde. - @Gilles bychom neměli exportovat
CLICOLOR
aLS_COLORS
buď? @DouglasDD to znamená, žeif [[-z $p1]];then return fi
kontrola v mé.bashrc
je chybná?