ABSTRACT: das konzept der environmentvariblen und deren handhabung durch die shell wird erklaert. AUDIENCE: beginners SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt wir haben bis jetzt folgende moeglichkeit kennengelernt wie ein programm zu seinen eingaben kommt: * argumente und switches die es auf der kommandline bekommt z.b.: ls -l /tmp * lesen von STDIN: z.b.: cat blabla.txt | grep blibli zusaetzlich zu diesen 2 eingaben gibt es noch eine wichtige 3te: ENVIRONMENT variablen. das ist eine liste von zuordnungen der art: NAME=wert wenn du auf der bash set siehst du eine lange liste dieser zuordnung die deine gegenwertige shell verwaltet. diese NAMEN sind sogennante environmentvariablen. man kann sie beliebig setzten: z.b. set TEST=blabla oder einfach nur einitppen: TEST=blabla setzt die variable TEST mit dem inhalt "blabla" die befehle zum setzen der variablen sind in den verschiedenen shells leicht unterschiedlich, das konzept der environmentvariablen an sich aber ist das selbe. wir behandeln hier nur die bash. du kannst den inhalt der variable anschaun mit: echo $TEST dabei ersetzt die shell nachdem du das kommando eingegebenhast die variable $TEST durch deren inhalt und ruft erst dann das programm echo auf das dann nur noch den von der shell eingesetzten text ausgeben muss. manche environement variablen haben fuer die shell selbst bedeutung. so z.b. die variable PS1 die den normalen prompt (also den text den du am anfang jeder kommandozeile siehst) festlegt. will man dass die shell beim aufruf von programmen die variablen an diese uebergibt so muessen dies variablen als exportierbar gesetzt werden einen teil dieser environment variablen koennen auch alle programme abfragen dazu muessen die variablen "exportiert werden": export TEST="max meier" (wir brauchen hier die anfuehrungszeichen weil wir in dem wert den wir zuweisen ein leerzeichen drinnen haben.) export -p aufrufst bekommst du eine liste aller exportierten variablen. (wenn du nun z.b. eine zweite bash "ueber" der aktuellen startest: bash und du echo $TEST so ist der wert immer noch verfuegbar. das programm hat diese environment variable quasi "geerbt" ebenso wie alle anderen programme die von dieser shell gestartet werden.) hilfen zu den befehlen set und export bekommst du nicht ueber man sondern weil diese befehle in der bash direkt eigebaut sind ueber die hilfe funktion der bash: help set help export du kannst beim zuweisen von werten auch rechnen. das geht mit dem bash befehl "let" let TEST=7*8*9+2 echo $TEST ergibt: 506 wozu das ganze? hier ein paar nuetzliche environmentvariablen: TERM gibt den namen den typ des aktuellen terminals an. wenn du z.b. ein telnet von windows oder alten terminals macht passiert es manchmal dass bei interaktiven programmen wie mutt oder pine oder beim editor die zeichen nicht richtig dargestllt werden und zeilen durcheinander kommen. da ist meist der terminal typ falsch. du gibst ein: export TERM=vt100 und danach reset das reset setzt alle terminal eigenschaften anhand der TERM variable und vt100 ist der kleinste gemeinsame nenner der fast ueberall funktioniert... (reset ist auch nuetzlich einzutippen wenn dein terminal mal durcheinandergeraten ist.. das loescht den bildschirm und setzt wieder eine lesbare schrift...) eine andere nuetzliche variable ist: EDITOR sie sollte den namen und pfad deines lieblingseditors enhalten. also z.b. /usr/bin/joe export EDITOR=/usr/bin/joe diese zuweisung ist natuerlich nur in der aktuellen shell gueltig. will man jedesmal beim einlogen diese einstellung der variablen gesetzt haben so schreiben wir diese befehle am besten in eindes der files die beim starten ausgefuehrt werden. das waeren: /etc/profile (wird fuer jede login shell aufgerufen. systemweit fuer alle user) im homeverzeichniss: .bash_profile (wird fuer login shells (also welche bei denen man neu eingelogt hat, aufgerufen.) .bashrc (wird fuer jede neue bash aufgerufen ausser fuer login shells) ueblicherweise will man die EDITOR einstellung z.b. in jeder shell. man schreibt sich daher in die .bashrc (mithilfe eines editors) z.b.: export EDITOR=/usr/bin/joe und ruft dann im .bash_profile das .bashrc auf (damit man es nicht 2mal eintragen muss) im .bash_profile eine zeile mit . ~/.bashrc (der punkt am anfang und dann zwischenraum heisst dass das file includiert werden soll) den wert einer variable NAME kannst du wie gesagt mit $NAME abfragen. alternativ geht auch ${NAME} das ist nuetzlich wenn du beim ausgeben keine zwischenraeume haben willst. z.b.: echo X${TEST}X wuerde den wert von TEST zwischen zwei X gesezt darstellen was sonst nicht ginge... so jetzt sezten wir uns noch dern prompt der bash neu: PS1="\h:\w\$ " setzte einen promt. die \h und \w werden von der bash durch die werte von hostname und verzeichniss eresetzt. will man auch noch den usernamen haben schreibt man z.b: PS1='\u@\h:\w\$ ' das \$ wird fuer root durch ein # ersetzt fuer alle anderen durch ein $ mit PS1='blabla ' haette man einfach den text "blabla " als prompt. EXERCISES: * versuchte mit dem "set" befehl environment variablen zu setzen und diese dann mit der $NAME substitution der shell wieder abzufragen. * verwende den let befehl zum rechnen * exportiere mit export variablen, dann starte eine subshell (einfach bash in der shell aufrufen) und schau ob du die variablen immer noch abfragen kannst. * experimentiere mit PS1 und setz dir einen schoenen aussagekraeftigen prompt. trage diesen und die einstellung fuer EDITOR in dein .bashrc ein. stell sicher dass die .bashrc auch im .bash_profile inkludiert wird. REFERENCES: help set help export help declare man bash