Hallo,
Thomas Rachel <
nutznetz-0c1b6768-bfa9...@spamschutz.glglgl.de> wrote:
> Am 28.11.2011 02:12 schrieb Helmut Blass:
> > Hallo,
> > bei einem meiner user-accounts wird beim Prompt nicht das akt.
> > Verzeichnis angezeigt.
> > Auch funktioniert die History-Funktion nicht.
> > Ersteres soll man fixen koennen mit dem Eintrag
> > "$ export PS1="[\u@\h \w]\\$"
> > in der .bash_profile.
> > Doch die .bash_profile existiert bei mir nicht, nur eine .bashrc?!?
> Könnte/sollte passen. Der Unterschied ist, daß die .bash_profile AFAIK
> nur bei Login-Shells ausgeführt wird, die .bashrc hingegen immer. D.h.,
> dort sollten nur Kommandos rein, die keine Ausgaben tätigen.
Es ist etwas anders: die .bash_profile (oder wenn die nicht existiert,
die .profile) im $HOME des jeweiligen Benutzers wird nur von Login-shells
eingelesen (wie du bereits richtig bemerkt hast). Die .bashrc wird aber
nicht in allen shells sondern normalerweise nur in interaktiven shells
die *keine* login-shells sind abgearbeitet. Wenn man z.B. aus dem "vi"
heraus mit "!ls" ein shell-Kommando ausfuehren laesst, wird das in
einer "nicht interaktiven shell" ausgefuehrt, in .bashrc definierte
"aliases" oder "shell-funktionen" stehen dabei also *nicht* zur Verfuegung.
Ich habe mir angewoehnt, z.B. das setzen von Environment-Variablen nur in
der .bash_profile (oder .profile) zu tun, und diese dann zu exportieren.
Die muss ich nicht in jeder shell neu setzen lassen, daher kommt so etwas
bei mir *niemals* in die .bashrc. In der .abshrc stehen dann bei mir
Definitionen von "shell-funktionen" oder ggfs. auch aliases (obwohl
ich aliases in der bash so gut wie nie verwende, da mir shell-funktionen
i.d.R. doch lieber sind).
> > und wenn ich die .bashrc ausführen will mit ".bashrc", kommt die
> > Meldung
> > ".bashrc not found"...
> > Wer weiss Abhilfe?
Sowohl .profile als auch .bashrc sind normalrweise *nicht* ausfuehrbar
(das "execute-Recht" fuer die Dateien ist *nicht* gesetzt), weil das
auch nicht nootwendig ist: diese Dateien werden ggfs. von der shell
"gesourced", d.h. eingelesen und in der *aktuellen* shell ausgefuehrt,
waehrend ausfuehrbare Dateien mit Aufruf ihres Namens in einer *subshell*
ausgefuehrt werden. Da in den Dateien auch Dinge drin stehen, die man
in der aktuellen shell ausgefuehrt haben will, weil deren Wirkung sonst
mit Beendigung der subshell in der sie ausgefuehrt werden wieder verloren
waeren (z.B. setzen von Environment-Variablen, Definitionen von aliases
oder shell-funktionen), kann man sie nachtraeglich auch in die aktuell
verwendete shell einlesen (genauso, wie es beim start der shell ggfs.
automatisch passieren wuerde), indem man ". .bashrc" oder "source .bashrc"
verwendet. Die man-page zur bash kann dir das nochmal etwas ausfuehrlicher
erklaeren (auch welche Dateien wann von der shell abgearbeitet werden,
findet man dort unter dem Stuchwort "INVOCATION" erklaert, z.B. wenn die
Environment-Variable "ENV" gesetzt ist, wird statt .bashrc die Datei
genommen, deren Namen in dieser Environment-Variable steht).
> Sie ist nicht ausführbar, und selbst wenn sie es wäre, würde das nichts
> bringen, da ein separater Prozeß die Variablen seines Aufrufers nicht
> ändern kann.
So ist es.
> Sie ist stattdessen zu sourcen, d.h.
>
> source ~/.bashrc
>
> oder einfach
>
> . ~/.bashrc
Ich bevorzuge normalerweise letzteres (und das nicht nur, weil es kuerzer
ist, sondern weil eine ordinaere "Bourne-shell" auch letzteres versteht,
waehrend sie mit das Kommando "source" nicht kennt ...
Tschuess,
Juergen Ilse (
jue...@usenet-verwaltung.de)
--
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.