PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschiedliches Environment bei su



shod
24.08.05, 09:03
Hallo zusammen,

bei dem Versuch für LFS 6.2 ein BuildScript zu bauen ist mir folgendes Aufgefallen:

su - lfs und darin export bringt das gewünschte Ergebniss (wie .bash_profile eingestellt)
su - lfs -c "export" scheint mir die Standartumgebung aus /etc/login.dfs zu sein

In der .bash_profile erzeuge ich mittel exec env -i ... eine saubere Umgebung und ergänze diese mit ein paar Umgebungsvariablen über die .bashrc

Ich vermute das su - lfs -c ... die .bash_profile gar nicht aussführt, konnte das allerdings in der man-page zu su nicht verifizieren.

Zu meinen Fragen:
:confused: Seh ich das richtig so?
:confused: Kann mir jemand sagen warum das so ist?
:confused: Kennt jemand ein Tool mit dem man den Ablauf eines beliebigen Programms über seine Befehle an sein Umgebung (Kernel, andere Programme,...) analysieren kann?

Ich hoffe ihr könnt mir helfen. Vielen Dank schon mal vorweg!

moxxer
24.08.05, 11:55
also zur letzten Frage bist Du vielleicht beim Kommando "strace" richtig,
die verschiedenen su-Umgebungen würde ich auch mal gerne wissen.

hp_tux
24.08.05, 12:24
Hallo,

also, ich schätze mal, daß

su - lfs -c "export"
nicht wirklich Sinn macht, denn

su - lfs
startet ja eine interaktive Shell, während

su -c "export"
ja wohl eine nicht-interaktive Shell startet.

Ich muß allerdings gestehen, daß das jetzt nur meine Vermutungen sind; wirklich belegen kann ich das leider auch nicht.

Gruß

hp_tux

shod
24.08.05, 14:31
....
also, ich schätze mal, daß

su - lfs -c "export"
nicht wirklich Sinn macht, denn

su - lfs
startet ja eine interaktive Shell, während

su -c "export"
ja wohl eine nicht-interaktive Shell startet.

...

Diese Beispiel macht keinen Sinn, da hast du schon recht.Ich wollte nur zeigen, dass unterschiedliche Umgebungen vorherrschen. Es ist ja schließlich ein und das selbe Programm, warum dieser Unterschied, und warum ist er nicht dokumentiert? :confused:

Vieleicht sollte ich mal beschreiben wie ich drauf gekommen bin:
wie schon gesagt wollte ich ein BuildScript für LFS 6.2 erstellen. Laut LFS 6.2 erstellt man sich einen User, und erzeugt oben kurz beschriebenen Dateien (.bash_profile und .bashrc) ... wechselt dann mittels
su - lfs zu diesem User fängt an die Pakete zu bauen.
Um das ganze nun automatisch ablaufen zu lassen, dachte ich ich schreib alle als lfs ausgeführten aktionen in ein Script und lasse dies dann als root mittels
su - lfs -c "build.sh" ausführen.


PS: Inzwischen bin ich drauf gekommen das es ja env gibt, damit könnte ich das Problem umgehen aber warum so umständlich?

hp_tux
24.08.05, 17:15
Hallo,


su - lfs -c "build.sh"
also, ich wiederhole nochmal: Durch diesen Befehl wird wohl eine nicht-interaktive Shell gestartet, und die interessiert sich halt nicht für sowas wie "~/.bash_profile" und Konsorten.

Gruß

hp_tux

shod
25.08.05, 06:51
OK jetzt hab ichs geschnallt (dauert manchmal bissel lämger bei mir :o , bin ja auch frustriert ;) )

Vielen Dank für die Antwort!

Inzwischen weis ich übrigens das es nicht an SU liegt, sonder an der Shell (in meinem Fall bash). Da diese bei non-interactive Aufrufen die Umgebung der aufrufenden Shell erbt, und diese durch das "-" auf Standart gesetzt wird.
Desshalb steht natürlich auch nichts in der manpage zu su ...

Greez Shod