On Saturday 20 January 2001 09:17, Hilmar Preusse wrote:
On 19.01.01 Andre Schulze (as8@Rcs1.urz.tu-dresden.de) wrote: Das ist ja schon deshalb sinnlos, weil die .profile beim login ausgefuehrt wird, also nur genau ein mal, wo soll da was gesetzt sein? Ausser login vererbt dir irgendwelche Schaetze ;-)
Nein, es wird nichts gesetzt. Durch die nicht gesetzte Variable wird eindeutig festgestellt, daß es sich um eine Login-Shell hendelt.
...ich dachte bisher: durch das "-" vor Argument 0 wird das festgestellt... ;-)
Leute, es wird unübersichtlich!
Fassen wir mal zusammen (Ausnahmen von den Regeln siehe Mittwoch): Bash ist Login-Shell: es wird .profile ausgeführt (und nur das) Bash ist Interaktiv: es wird .bashrc ausgeführt (und nur das) Bash ist Batch-Interpreter: wenn die Variable $ENV existiert wird das darin gespeicherte Skript genommen
Woran erkennt eine Bash ihren Status? Interpreter: sie hat Argumente, die auf ein Skript verweisen Interaktiv: keine Argumente (ausser Schalter, wie --posix) Login: das ist komplizierter....
Die Unix-exec*-Calls bekommen 3 Parameter(listen): Den Dateinamen des Programms (char*), alle Argumente (char**) und alle Umgebungsvariablen (char**). In den Argumenten hat Argument 0 eine Sonderstellung: es spiegelt den Namen des Programmes wieder (normalerweise ohne Pfad, im Gegensatz zum 1. Parameter von exec, wo immer der Pfad drin sein muss (...Ausnahmen....)). Bei einer Login-Shell wird diesem Argument jedoch ein "-" vorangestellt.
Konrad