Archiv verlassen und diese Seite im Standarddesign anzeigen : Sript schreiben ?
Hi ich hab angefangen ein script zu schreiben leider habe ich dabei einige probleme momentan sieht es so aus
export LD_LIBRARY_PATH=...../lib:$LD_LIBRARY_PATH
/....././Tina32
ich würde das aber gerne irgentwie so machen das da wo die punkte sind irgentwie automatisch das verzeichnis reingestezt wird wo sich das programm grade befindet geht das überhaupt ?
jup das geht in der konsole aber leider nicht wenn man das programm z.b. von kde aus startet
Der Gestreifte
21.05.04, 18:13
ich würde das aber gerne irgentwie so machen das da wo die punkte sind irgentwie automatisch das verzeichnis reingestezt wird wo sich das programm grade befindet geht das überhaupt ?
Meinst Du mit "sich das Programm befindet" das Skript selbst? Dann suchst Du "pwd"
also das skript und program befinden sich im gleichen ordner und das skript setzt im prinzip die variabel für die lib´s und startet dann erst das eigentliche programm ist zwar etwas umstendlich aber anders geht das nicht.
ich wolte das programm als tarbal unter die leute bringen deshalb ist der ordner auch variabel weil das ja jeder wo anders ausführt.
Kannst du Englisch?
Dann lies auch mal das dazu: Why LD_LIBRARY_PATH is bad (http://www.visi.com/~barr/ldpath.html)
Ansonsten geht es in der von dir gewünschten Weise sowieso nicht mit relativer Pfadangabe. Du kannst ja einen Installskript schreiben, dass den Installationspfad automatisch anpasst a la:
#!/bin/sh
#
# install.sh
INSTDIR=/usr/local
BINDIR=$INSTDIR/bin
LIBDIR=$INSTDIR/lib
if [ ! -d "$INSTDIR" ]; then
echo "Verzeichnis $INSTDIR existiert nicht."
# Hier evtl. Generierung des Verzeichnisses inkl. der Unterverzeichnisse
# oder Abbruch mit exit 1
fi
if [ ! -w "$BINDIR" ]; then
echo "Fehler: Keine Schreibberechtigung für Installationsverzeichnis $BINDIR"
exit 1
fi
if [ ! -w "$LIBDIR" ]; then
echo "Fehler: Keine Schreibberechtigung für Installationsverzeichnis $LIBDIR"
exit 1
fi
#
# Hier die fuer dein Problem RELEVANTE dynamische Generierung des Startskriptes
# fuer dein Programm:
#
/usr/bin/cat << EOF > $BINDIR/deinWrapper.sh
#!/bin/sh
LD_LIBRARY_PATH=$LIBDIR:$LD_LIBRARY_PATH
$BINDIR/programm
EOF
# Ende Generierung
/bin/cp programm $BINDIR
/bin/chmod 755 $BINDIR/programm
/bin/chmod 755 $BINDIR/deinWrapper.sh
echo "Installation beendet ;o)"
Gruß
Kai
erstmahl danke
ist zwar nicht das was ich wolte weil dann kann ich ja auch nen grafischen installer benutzen naja erstmahl danke
ich würde das aber gerne irgentwie so machen das da wo die punkte sind irgentwie automatisch das verzeichnis reingestezt wird wo sich das programm grade befindet geht das überhaupt ?
probiers mal damit:
#!/bin/sh
MEINPFAD=${0%/*}
du könntest allerdings auch argv[0] selbst auswerten und die libraries dann anhand des pfades laden.
-j
psycho0815
21.05.04, 19:53
was spricht eiegtnlich gegen
PFAD=`pwd`
? klappt das nicht?
was spricht eiegtnlich gegen
PFAD=`pwd`
? klappt das nicht?
sorry hab ich überlesen werde ich glech mahl testen
was spricht eiegtnlich gegen
PFAD=`pwd`
? klappt das nicht?
nein, das klappt nicht: pwd gibt das derzeitige verzeichnis aus, nicht das verzeichnis in dem das skript/binary liegt das ausgeführt wird. wenn ein skript in /usr/local/sbin liegt und aus /tmp aufgerufen wird gibt pwd /tmp zurück.
-j
Eine weitere Möglichkeit wäre mit locate oder find zu arbeiten.
Beides aber nicht zu empfehlen, da find zu langsam (beim Starten erst das Binary suchen, evtl. ohne Erfolg) und locate hat direkt nach der Installation keine aktuelle Datenbank.
Das mit dem Installationsverzeichnis ist relativ nicht zu finden, leider. :(
Das mit dem Installationsverzeichnis ist relativ nicht zu finden, leider. :(
wie ich bereits schrieb liefert argv[0] die gwünschte information. aber man kann natürlich weiter nach einer anderen lösung suchen.
-j
wie ich bereits schrieb liefert argv[0] die gwünschte information. aber man kann natürlich weiter nach einer anderen lösung suchen.
-j
War etwas unaufmerksam beim Lesen und habe noch dazu einen Riesen Blödsinn gepostet.
:rolleyes:
wie ich bereits schrieb liefert argv[0] die gwünschte information. aber man kann natürlich weiter nach einer anderen lösung suchen.
-j
hi wie setze ich das genau ein ?
hi wie setze ich das genau ein ?
du wolltest eine möglichkeit herauszufinden in welchem verzeichnis sich das aufgerufene programm befindet. argv[0] bzw. $0 liefert diese info.
wenn also dein prorgamm im verzeichnis BLA und deine libs im verzechnis BLA/lib sind (ich nehme an das ist sinn dieser übung) dann könnte das startskript so aussehen:
#!/bin/sh
PFAD=${0%/*}
export LD_LIBRARY_PATH=$PFAD/lib:$LD_LIBRARY_PATH
$PFAD/Tina32
-j
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.