2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

Wat is het .bashrc bestand?

Unix shells als je begint met het lezen van het .bashrc bestand en het uitvoeren van commando’s die erin geschreven zijn. Wat is dit bestand en wat voert het uit?

Antwoorden (3)

69
69
69
2009-09-30 15:57:31 +0000

Eigenlijk is het bash specifiek dat .bashrc leest (en /etc/bash.bashrc). Er zijn veel verschillende shells.

De bash man pagina (door Brian Fox en Chet Ramey; ook info pagina “Bash Startup Files” ) is de gezaghebbende referentie:

Wanneer een interactieve shell die geen login shell is wordt gestart, leest en voert bash commando’s uit van ~/.bashrc, als dat bestand bestaat. Dit kan worden voorkomen door de optie --norc te gebruiken. De --rcfile bestandsoptie zal bash dwingen om commando’s van bestand te lezen en uit te voeren in plaats van ~/.bashrc.

Wanneer bash niet-interactief wordt gestart, om bijvoorbeeld een shell script uit te voeren, zoekt het de variabele BASH_ENV in de omgeving, breidt de waarde ervan uit als deze daar verschijnt, en gebruikt het de uitgebreide waarde als de naam van een bestand om te lezen en uit te voeren. Bash gedraagt zich alsof het volgende commando wordt uitgevoerd:

if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi

maar de waarde van de variabele PATH wordt niet gebruikt om te zoeken naar de bestandsnaam.

Het bestand is gewoon shell commando’s. Het wordt meestal gebruikt om prompts te wijzigen, omgevingsvariabelen in te stellen en shellprocedures te definiëren. Traditioneel wordt het bestand .profile voor dit doel gebruikt, maar bash heeft zoveel extensies dat het zijn eigen opstartbestand nodig heeft voor gebruikers die bashisms in opstartbestanden willen zetten.

Not a login shell” betekent dingen zoals het starten van een script en meestal het starten van terminalvensters door window managers. Soms stel ik een .bashrc en BASH_ENV systeem in om alleen bron .profile te hebben. Zolang je niet buiten de POSIX-shell commando’s treedt, krijg je dezelfde initialisatie in elke willekeurige shell.

Het is vooral waardevol als sh echt bash is, wat soms gebeurt. Om dit te doen gebruik je: . .profile

Een van de redenen dat dit allemaal zo complex is, is omdat mensen soms dingen die uitvoer produceren in shell opstartbestanden zetten, of ze stellen onvoorwaardelijk prompts in. Dit veroorzaakt veel problemen bij het uitvoeren van shell programma’s en backtick commando’s binnen talen, om nog maar te zwijgen van system(3) van C programma’s. De manier waarop bash opstart is ontworpen, denk ik, om één bestand te hebben waar de uitvoer en de prompt instelling OK is en één bestand waar dat niet het geval is. Traditioneel zou een run-time test worden gedaan om de interactiviteit te onderscheiden, bijvoorbeeld om te controleren of de prompt is ingesteld.

12
12
12
2009-09-30 15:56:30 +0000

Wanneer Bash start, voert het de commando’s uit in verschillende scripts.

Wanneer Bash wordt aangeroepen als een interactieve login-shell, leest het eerst de commando’s uit het bestand /etc/profile en voert het deze uit, als dat bestand bestaat. Na het lezen van dat bestand, zoekt het naar ~/.bash_profile, ~/.bash_login, en ~/.profile, in die volgorde, en leest en voert het commando’s uit van het eerste bestand dat bestaat en leesbaar is.

Wanneer een login-shell wordt afgesloten, leest Bash commando’s uit het bestand ~/.bash_logout, als dat bestaat.

Wanneer een interactieve shell die geen login-shell is wordt gestart, leest Bash commando’s uit ~/.bashrc, als dat bestand bestaat, en voert die uit. Dit kan worden geremd door de –norc optie te gebruiken. De –rcfile file optie zal Bash dwingen om commando’s uit het bestand te lezen en uit te voeren in plaats van ~/.bashrc. http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Hier zijn enkele trucs en tips: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Laten we proberen de prompt in te stellen zodat deze de datum van vandaag en de hostnaam kan weergeven:

PS1="\d \h $ "
10
10
10
2009-09-30 15:56:46 +0000

Het zou verschillende “initialisatie” commando’s voor je shell moeten bevatten, bijv.:

  • Aanmaken van nuttige aliassen (bijv. alias ll='ls -l').
  • Toevoegen van meer directories aan PATH.
  • Instellen van nieuwe omgevingsvariabelen.