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 aPS1
-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óktty -s
vagytest -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 aif [[-z $p1]];then return fi
ellenőrzés a.bashrc
-ben hibás?