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ědil PS1 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 s tty -s nebo test -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 a LS_COLORS buď? @DouglasDD to znamená, že if [[-z $p1]];then return fi kontrola v mé .bashrc je chybná?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *