Co je bash\_profile a jaké je jeho použití?


Nejlepší odpověď

Díky za A2A.

Věřím, že Anmol Vishwakarma podal vynikající popis na tom záleží.

Jen abychom se ujistili, že dáváme věci na pravou míru:

  • / etc / profile, ~ / .bash\_rc , a ~ / .bash\_profile, jsou všechny soubory a nazývají se c konfigurační skripty. Mohou obsahovat deklarace proměnných, export proměnných, příkazy, které mají být provedeny při přihlášení, jako je kontrola pošty nebo zpráv, mimo jiné nastavení umask. Typické věci, které uživatelé dělají, jsou: přidání nějakého adresáře do $ PATH, export nějaké proměnné, změna $ PS1, nastavení barev zobrazení, přidání uvítací textové zprávy atd.
  • Všechny tyto soubory, kromě / etc / profile, jsou ve výchozím nastavení skryté, jak jsou označeny úvodní tečkou (takže to není bash\_profile , ale vlastně .bash\_profile ).
  • Když se přihlašujete (lokálně nebo vzdáleně), nazývá se to přihlašovací shell a trochu se s ním zachází trochu odlišné od normálního vyvolání shellu. V takovém případě se provede soubor / etc / profile , pokud je přítomen, po kterém buď ~ /.bash\_profile nebo ~ / .bashrc soubor je spuštěn v tomto pořadí.
  • Pro interaktivní prostředí, tj. ten, se kterým můžete komunikovat, protože stdin a stderr jsou oba TTY, soubor ~ / .bash\_profile se nespustí, ale ~ / .bashrc je.
  • Pro neinteraktivní shell, tj. ten s jedním nebo oběma stdin / stderr není TTY, neprovede se žádný konfigurační skript .
  • V přihlašovacím prostředí se při odhlášení provede soubor ~ / .bash\_logout , pokud je přítomen.
  • Podle POSIX, stderr (a ne stdout ) je stream, který určuje, zda je shell interaktivní. Pokud je stderr přesměrován, nejedná se o interaktivní prostředí, pokud -i není uvedeno v vyvolání shellu. stdout nemá stejný účinek.

Odpověď

To je jen můj názor, ale pokud exit v kontextu funkce shellu (která ukončí aktuální proces shellu) byl stejný jako return (který se vrací z aktuální funkce), pak jste nemohli napsat kód do funkce shellu, která ukončí aktuální skript, když je kód v těle funkce detekován fatální stav. Přemýšlejte o voláních za běhu assert() (nebo jejich ekvivalenty) ve více strukturovaných programovacích jazycích.

Místo toho byste mohli pouze vrátit kód chyby volajícímu.

Je pravda, že náhlé ukončení fatálních chyb rozhodně není tím nejlepším stylem programování (libsvn Subversion měl z tohoto důvodu velmi špatnou pověst: fatální chyby zjištěné v kód knihovny vedl k tomu, že program náhle ukončil program a nedal volacímu kódu žádnou šanci upozornit uživatele nebo se pokusit zotavit se z chyby).

Možnost náhle opustit při detekci závažných chyb je docela praktické při vývoji řešení, která fungují v očekávaných podmínkách – a programování prostředí (a tedy i programování GNU Bash) vždy spočívalo v poskytování krátká praktická řešení pro běžné případy, nikoli složitá řešení pečlivě vyřizující všechny možné zvláštnosti Případ l (existuje spousta dalších nástrojů / jazyků, ať už je to C, Tcl, Perl, Python nebo dokonce PowerShell).

Všimněte si také, že pravděpodobný důvod, proč někdo používá skripty prostředí Bourne v první místo namísto použití výše zmíněných nástrojů / jazyků je to, že při použití prvního z nich je mnohem snazší sestavit něco, co skutečně funguje, než použití druhého – předpokladem bylo, že skriptování pomocí shellu umožnilo uživatelům používat téměř stejnou syntaxi a nástroje, které každý den interaktivně používali, a tedy něco, s čím už byli obeznámeni.

Ptali jste se: Integrovaný příkaz return v bash je pro funkce shellu, ale proč není příkaz exit dostatečný pro funkce shellu?

Napsat komentář

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