Csak sok időt töltöttem a bejelentkezés és az interaktív héjak olvasásával, és miért kellett vagy nem kellett beállítani a környezetet változók, shell funkciók, stb. a különféle profil- és bashrc fájlokban. ebben a bejegyzésben megemlítették, hogy olyan alapvető dolgokat, mint például azonnali opciók, a ~ / .bashrc fájlban kell beállítani. Ez arra késztetett, hogy a PS1 változón tűnődjek. Az általam látott összes példában van valami hasonló: export PS1="". Valóban exportálni kell ezt a környezetbe, mivel csak a bash-nak van jelentése? Csak létrehozza a kívánt hatást számomra, de kíváncsi vagyok, hiányzik-e valami.

Válasz

Ez helyesen: PS1 csak a bash interaktív példányaiban értelmezhető, ezért a ~/.bashrc és nem exportálható. A PS1 más héjakban is értelmes, de ettől eltérő jelentése van, mert azonnali bővítés különbözik a héjak között. Valójában a bash példányai között is PS1 jelentése különböző lehet, mivel a jelentés a shell opcióktól függ (legalább promptvars).

A PS1 exportálása a környezetbe .profile -ből való visszavonás az 1970-es évekbe, amikor csak egy héj volt, amely használta (a Bourne shell), és nem volt konfigurációs fájlja. Ez ma is működik, ha mindig ugyanazt a shellt használja, és soha nem konfigurálja másképp. De az összes modern shell, amelyet nem csak szkriptek számára terveztek (csh, ksh , bash, zsh,…) olvasson el egy konfigurációs fájlt, amikor interaktívan indul (.cshrc, .kshrc, .bashrc, .zshrc,…), így az 1970-es évek módszerére már nincs szükség. A PS1 és más héjspecifikus beállítások beállítása egy héjspecifikus fájlban, és ha nem exportálja azokat a környezetbe, elkerüli a dolgok feltörését, ha más héjkonfigurációt vagy más héjat vagy egy különböző terminál, amely nem képes megmutatni a szokásos gyors fantáziáját. A PS1 beállítása egy shell-specifikus fájlban folyamatosan működik, míg az .profile és exportálása csak „egyszerű” esetekben működik, tehát nincs ok arra, hogy ne tegyük a megfelelő módon, de rengeteg rossz oktatóanyag található az interneten, sőt rossz alapértelmezett konfigurációk is vannak a disztribúciókban. C “est la vie .

Megjegyzések

  • Hogyan exportálható a PS1 from .profile nem belépő bash héjaknál működnek, mivel nem ' származnának belőle? Azt akarja mondani, hogy ez működne, mert a nem A bejelentkezési héj elágazik egy bejelentkezési héjból, így örökli a PS1 -t a környezeten keresztül?
  • @MikeSweeney igen, hogy ' s miért ' s exportálta .
  • A PS1 exportálásával kapcsolatos rossz elképzelés egyik módja a if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi – ami általában megjelenik az emberek ' s .bashrc fájljaiban, hogy csak a parancs-kiegészítést töltsön be, ha ez egy felhasználó ' s interaktív terminálhéj. Tehát, látva, hogy ott működik, ugyanaz a logika kanyarodik a shell szkriptekben, ezért a " szükség van " az exportáláshoz. HELYETT ellenőriznünk kell a bejelentkezést teraktív / terminális felhasználók tty -s vagy test -t 0.
  • @DouglasDD Valóban. A PS1 teszt például a Debian ' s /etc/profile -ben volt például korosztályokig. Nem tudom, hogy ' honnan merült fel ez a rossz gyakorlat. Gyanítom, hogy egy adott felhasználási esetből származott (esetleg rlogin vagy ssh bejelentkezéseket észlelt?), Ahol történetesen működött. Sajnos sok más esetben kudarcot vall, ezért a kérdés sok kérdése itt és másutt.
  • @Gilles nem szabad exportálnunk a CLICOLOR és a ? @DouglasDD azt jelenti, hogy a if [[-z $p1]];then return fi ellenőrzés a .bashrc -ben hibás?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük