Quest-ce que bash\_profile et quelle est son utilisation?


Meilleure réponse

Merci pour A2A.

Je crois quAnmol Vishwakarma a donné une excellente description sur le importe.

Juste pour être sûr de mettre les choses en perspective:

  • / etc / profile, ~ / .bash\_rc , et ~ / .bash\_profile, sont tous des fichiers et sont appelés c scripts de configuration. Ils peuvent contenir des déclarations de variables, des variables dexportation, des commandes à exécuter lors de la connexion comme la vérification du courrier ou des actualités, la configuration dumask, entre autres. Les actions typiques des utilisateurs sont: ajouter un répertoire à $ PATH, exporter une variable, changer $ PS1, définir les couleurs daffichage, ajouter un message texte de bienvenue, etc.
  • Tous ces fichiers, à lexception de / etc / profile, sont masqués par défaut, comme indiqué par le point de début (donc ce nest pas bash\_profile mais en fait .bash\_profile ).
  • Lorsque vous vous connectez (localement ou à distance), cela sappelle un shell de connexion, et est traité un peu peu différent de linvocation normale du shell. Dans ce cas, le fichier / etc / profile , sil est présent, est exécuté, après quoi soit un ~ /.bash\_profile ou un fichier ~ / .bashrc est exécuté, dans cet ordre.
  • Pour un shell interactif, ie celui avec lequel vous pouvez interagir, car les stdin et stderr du shell sont tous les deux TTY, le fichier ~ / .bash\_profile nest pas exécuté, mais le ~ / .bashrc est.
  • Pour un shell non interactif, cest-à-dire celui avec un ou les deux stdin / stderr nest pas un TTY, aucun script de configuration nest exécuté .
  • Dans un shell de connexion, à la déconnexion, un fichier ~ / .bash\_logout , sil est présent, est exécuté.
  • Selon POSIX, stderr (et non stdout ) est le flux qui détermine si un shell est interactif. Si stderr est redirigé, il ne sagit pas dun shell interactif, sauf si -i est spécifié dans linvocation du shell. stdout na pas le même effet.

Réponse

Cest juste mon avis, mais si exit dans le contexte dune fonction shell (qui quitte le processus shell actuel) était identique à un return (qui revient du fonction actuelle), vous ne pouvez pas écrire de code dans une fonction shell qui quitte le script en cours lorsquune condition fatale est détectée par le code dans le corps de la fonction. Pensez aux appels au runtime assert() (ou équivalents) dans des langages de programmation plus structurés.

Tout ce que vous pourriez faire à la place serait de renvoyer un code derreur à lappelant.

Certes, sortir brusquement sur des erreurs fatales nest certainement pas le meilleur style de programmation (libsvn de Subversion avait autrefois une très mauvaise réputation à cause de cela: des erreurs fatales détectées dans le le code de la bibliothèque a conduit le programme qui lutilisait à se fermer brusquement, ne laissant aucune chance au code appelant davertir lutilisateur ou dessayer de récupérer de lerreur).

Néanmoins, être capable de quitter brusquement lors de la détection derreurs fatales est tout à fait pratique dans le développement de solutions qui fonctionnent dans les conditions attendues – et la programmation shell (et donc la programmation GNU Bash) a toujours consisté à fournir des solutions pratiques courtes pour les cas courants, et non des solutions complexes traitant soigneusement toutes les spécia possibles l cas (il existe de nombreux autres outils / langages pour cela, que ce soit C, Tcl, Perl, Python ou même PowerShell).

Notez également que la raison probable pour laquelle quelquun utilise des scripts Bourne shell dans la première place au lieu dutiliser les outils / langages mentionnés ci-dessus est que lutilisation du premier est assez plus facile à assembler quelque chose qui fait un travail réellement utile que dutiliser le second – lhypothèse une fois était que le script shell permettait aux utilisateurs dutiliser presque la même syntaxe et outils quils utilisaient de manière interactive tous les jours, donc quelque chose quils connaissaient déjà.

Vous avez demandé: La commande return intégrée dans bash est pour les fonctions shell, mais pourquoi la commande exit nest-elle pas suffisante pour les fonctions shell?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *