Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
wie weiss ein skript, ob es gesourct wird

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kanonenfutter
Gast





BeitragVerfasst am: 20. Aug 2004 19:23   Titel: wie weiss ein skript, ob es gesourct wird

Hi,

ich habe hier ein merkwürdiges problem. ich habe ein skript, das am anfang zunächst mal prüft, ob es gesourct aufgerufen wird oder nicht (um dann entsprechend anders zu reagieren). ich habe das damals durch einen vergleich [ "$0" = "/bin/bash" ] gelöst, und das skript lief auch jahrelang problemlos (auf ner suse-box).
nun wollte ich es unter slackware10 benutzen. dabei stelle ich folgendes fest: wenn die konsole von konqueror aus gestartet wird, klappt es. wenn sie aber direkt gestartet wird, durch auruf von "konsole", dann taucht bei "ps aux" nicht "/bin/bash" auf sondern "-bash" auf. ich müsste in diesem fall den vergleich also entsprechend anpassen.
nun frage ich mich und euch,
1. was eine elegantere lösung wäre (eine die in beiden fällen klappt), wie das skript ermittlen kann, ob es gesourct wird. ok, ich könnte statt einem strengen vergleich ja alles zulassen, was "bash" beinhaltet, aber vielleicht gehts eben auch eleganter.
2. was hat das "-bash" zu bedeuten.
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 20. Aug 2004 20:57   Titel:

Das hier müsste gehn:

Code:

if [ "$0" = "/bin/bash" -o "$0" = "-bash" ]; then
[...]
fi
 
Benutzer-Profile anzeigen Private Nachricht senden

kanonenfutter
Gast





BeitragVerfasst am: 20. Aug 2004 21:26   Titel:

Hi Lateralus,

erstmal danke für die schnelle antwort!
ja, so würde es gehen, aber mir wäre halt eine allgemeine lösung lieber. was ist, wenn ich irgendwann noch auf einen weiteren fall stosse, der mit dieser konstruktion auch nicht abgefangen wird? ich würde eben überhaupt gerne wissen, wieso es diese verschiedenen formen von bash gibt, und was dieses "-bash" soll und ob man den weg über $0 irgendwie umgehen kann.

gruss, kanonenfutter
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 21. Aug 2004 11:06   Titel:

Hi!

Die allgemeine Lösung ist, in dem aufrufenden Skript eine Variable zu setzen, de bei direktem Aufruf nicht gesetzt wird. Durch Abfrage der Variablen läßt sich das unterscheiden.

Du könntest z.B. in die Variable die Prozess-ID der Aufrufers schreiben. Wenn die PID im aufgerufenen Skript die gleiche ist, dann wurde das Skript gesourct, denn dann läuft alles im gleichen Prozess ab.

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

kanonenfutter
Gast





BeitragVerfasst am: 22. Aug 2004 20:27   Titel:

Hallo hjb,

das mit der PID ist schonmal ne gute idee. allerdings wird das skript nicht von einem anderen skript aufgerufen sondern von hand, und da kann/will ich keine PID angeben.
beim ersten aufruf (gesourced) werden einige environmentvariablen gesetzt. bei weiteren aufrufen (nicht gesourced) werden diese dann benutzt.
ich hab jetzt spasseshalber mal eine etwas umständliche variante gewählt:
Code:
ps --no-headers --pid $$ | grep -wq "bash" && sourced="true" || sourced="false"

genausogut könnte man (ähnlich wie in der Lösung von Lateralus) die variable $0 prüfen, ob sie "bash" enthält. aber da wusste ich nicht, wie man (mit parametersubstitution o.ä. auf ganze wörter prüfen kann (grep -w)). daher der blöde umweg über ps (performance ist hier aber egal).
die lösung hat mehrere nachteile: sie geht enthält "bash" hartcodiert und hat diesen umweg über ps und grep, obwohl man ja den namen bereits in $0 hat. wenn also jemand noch ne bessere lösung weiss, wäre ich sehr interessiert.
 

kanonenfutter
Gast





BeitragVerfasst am: 22. Aug 2004 20:33   Titel:

ähm, das war tatsächlich absurd umständlich. einfacher wäre:
Code:
echo $0 | grep -wq "bash" && sourced="true" || sourced="false"
 

kanonenfutter
Gast





BeitragVerfasst am: 22. Aug 2004 20:52   Titel:

Code:
echo $(basename $0) | grep -wq "bash" && sourced="true" || sourced="false"
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy