PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sript schreiben ?



theborg
21.05.04, 17:07
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 ?

L00NIX
21.05.04, 17:30
Ja, mit . (ein Punkt)

theborg
21.05.04, 17:35
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"

theborg
21.05.04, 18:19
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.

L00NIX
21.05.04, 18:35
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

theborg
21.05.04, 19:08
erstmahl danke

ist zwar nicht das was ich wolte weil dann kann ich ja auch nen grafischen installer benutzen naja erstmahl danke

Jasper
21.05.04, 19:23
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?

theborg
21.05.04, 20:09
was spricht eiegtnlich gegen
PFAD=`pwd`
? klappt das nicht?


sorry hab ich überlesen werde ich glech mahl testen

Jasper
21.05.04, 21:27
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

L00NIX
21.05.04, 23:25
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. :(

Jasper
21.05.04, 23:37
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

L00NIX
22.05.04, 00:01
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:

theborg
22.05.04, 13:03
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 ?

Jasper
22.05.04, 15:10
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

theborg
22.05.04, 15:17
besten dank es geht