Ce este bash\_profile și la ce folosește?


Cel mai bun răspuns

Vă mulțumim pentru A2A.

Cred că Anmol Vishwakarma a dat o descriere excelentă a contează.

Doar pentru a ne asigura că punem lucrurile în perspectivă:

  • / etc / profile, ~ / .bash\_rc , și ~ / .bash\_profile, sunt toate fișiere și se numesc c scripturi de configurare. Ele pot conține declarații variabile, variabile de export, comenzi care trebuie executate la conectare, cum ar fi verificarea e-mailului sau a știrilor, setarea umask, printre altele. Lucrurile tipice pe care le fac utilizatorii sunt: ​​adăugarea unor dir la $ PATH, exportarea unor variabile, schimbarea $ PS1, setarea culorilor de afișare, adăugarea unui mesaj text de salut etc.
  • Toate acele fișiere, cu excepția / etc / profile, sunt ascunse în mod implicit, așa cum este notat de punctul principal (deci nu este bash\_profile ci de fapt .bash\_profile ).
  • Când vă conectați (fie local, fie de la distanță), acesta se numește shell de conectare și este tratat puțin puțin diferit de invocarea normală a shell-ului. În acest caz, fișierul / etc / profile , dacă este prezent, este executat, după care fie un ~ /.bash\_profile sau un fișier ~ / .bashrc este executat, în această ordine.
  • Pentru un shell interactiv, adică cel cu care puteți interacționa, deoarece shell-ul stdin și stderr sunt ambele TTY, fișierul ~ / .bash\_profile nu este executat, dar ~ / .bashrc este.
  • Pentru un shell non-interactiv, adică cel cu unul sau ambii stdin / stderr nu este un TTY, nu se execută niciun script de configurare .
  • Într-un shell de conectare, la deconectare, este executat un fișier ~ / .bash\_logout , dacă este prezent.
  • Conform POSIX, stderr (și nu stdout ) este fluxul care determină dacă un shell este interactiv. Dacă stderr este redirecționat, acesta nu este un shell interactiv, cu excepția cazului în care -i este specificat în invocarea coajă. stdout nu are același efect.

Răspuns

Aceasta este doar părerea mea, dar dacă exit în contextul unei funcții shell (care părăsește procesul de shell curent) a fost același cu un return (care revine din funcția curentă), atunci nu ați putut scrie cod într-o funcție shell care părăsește scriptul curent atunci când o stare fatală este detectată de codul din corpul funcției. Gândiți-vă la apeluri către runtime assert() (sau echivalente) în limbaje de programare mai structurate.

Tot ce ați putea face este să întoarceți un cod de eroare către apelant.

Adevărat, ieșirea bruscă la erori fatale nu este cu siguranță cel mai bun stil de programare (libsvn de la Subversion a avut odată o reputație foarte proastă din acest motiv: erori fatale detectate în codul bibliotecii a dus la utilizarea programului, care a renunțat brusc și nu a dat nicio șansă codului de apel pentru a notifica utilizatorul sau pentru a încerca să se recupereze din eroare).

destul de practic în dezvoltarea de soluții care funcționează în condițiile așteptate – și programarea shell (și, de asemenea, programarea GNU Bash) a fost întotdeauna despre furnizarea soluții practice scurte pentru cazurile obișnuite și nu soluții complexe care tratează cu atenție fiecare specie posibilă l caz (există o mulțime de alte instrumente / limbaje pentru asta, fie că este vorba de C, Tcl, Perl, Python sau chiar PowerShell).

Rețineți, de asemenea, că probabil motivul pentru care cineva folosește scripturile shell Bourne în primul loc în loc să utilizați instrumentele / limbajele menționate mai sus este pentru că folosind primul este destul de ușor să puneți laolaltă ceva care să funcționeze de fapt util decât să folosiți cel de-al doilea – presupunerea o dată a fost că scriptul shell a permis utilizatorilor să folosească aproape aceeași sintaxă și instrumente pe care le-au folosit interactiv în fiecare zi, deci ceva cu care erau deja familiarizați.

Ați întrebat: Comanda încorporată „return” în bash este pentru funcțiile shell, dar de ce comanda „exit” nu este suficientă pentru funcțiile shell?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *