Mailinglist Archive: opensuse-de (4027 mails)

< Previous Next >
Re: $PATH
  • From: David Haller <david@xxxxxxxxxx>
  • Date: Thu, 29 Apr 2004 02:31:34 +0200
  • Message-id: <20040429003134.GB19740@xxxxxxxxxxxxxxxxxx>
Hallo,

Am Wed, 28 Apr 2004, Marcus Habermehl schrieb:
>Am Di, 2004-04-27 um 23.12 schrieb Christian Boltz:
>> Am Dienstag, 27. April 2004 18:33 schrieb Marcus Habermehl:
[..]
>> Was spricht dagegen?
>> Anders gefragt: Über wie viele Symlinks reden wir? Einen? Zehn? Hundert?
>
>Ich hatte hier einen WM, der hat fast zehn Dateien nach /usr/local/bin
>installiert. Bei XFce4 wird sich auch einiges ansammeln.
>
>Mir geht es halt darum, dass ich gerne einheitliche spec Files hätte.
>Und bei manchen Paketen wäre das dann zu viele Links. Zumal ich die
>Variante mit $PATH doch stilvoller finde.
>
>Irgendwo.

Find ich ok. Man muss halt einen Kompromiss zwischen symlinks und nem
aufgeblaehten PATH finden. Ich finde, so ab 15-20 Dateien lohnt sich
die Aufnahme in PATH.

>> > Außer das Skript löscht die Datei, anstatt sie zu bearbeiten.
>>
>> Das wäre natürlich der "worst case".
>
>Ja. Vor allem dann, wenn es die /etc/ld.so.conf trifft. Wie bei mir
>vorhin.

Die ld.so.conf kann man ja nun wirklich einfach neu erstellen. Oder
nachinstallieren. Oder sich eine mailen lassen.

Ich arbeite hier uebrigens lieber mit nem wrapper-script, dass dann
LD_LIBRARY_PATH setzt, so z.B. fuer mein "sX" script (startX), das
dann fuer WindowMaker (meinem normalen WM, sX wird dann als swmaker
aufgerufen, oder auch als sX wmaker) folgendes macht:

====
function conf_wmaker() {
WMVERSION="0.80"
WMROOT="/opt/WMaker"
export GNUSTEP_USER_ROOT="~/GNUstep-${WMVERSION}"
export GNUSTEP_LOCAL_ROOT="$WMROOT"
export GNUSTEP_SYSTEM_ROOT="/opt/WMaker/GNUstep"
LD_LIBRARY_PATH="${WMROOT}/lib:$LD_LIBRARY_PATH"
LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed 's/^://;s/:$//'`
export LD_LIBRARY_PATH
export PATH="${WMROOT}/bin:$PATH"
export MANPATH="${WMROOT}/man:$MANPATH"
if ! test -d ~/GNUstep || test -L ~/GNUstep; then
if test "x`readlink ~/GNUstep`" != "x${HOME}/GNUstep-${WMVERSION}"
then
rm ~/GNUstep
ln -s ~/GNUstep-${WMVERSION} ~/GNUstep
fi
fi
}
====

Analoges mache ich auch mit anderen Sachen, sowas macht z.B. das
Mozilla-Startscript, IIRC das startkde-script u.v.a.m...

>> > Aber wie in der Antwort auf Davids Mail habe ich eine Lösung
>> > gefunden, die bisher funktioniert.
>> >
>> > mv /etc/profile /etc/profile.tmp
>>
>> besser cp, damit die /etc/profile garantiert auch hinterher existiert.

ACK.

>> Mögliche Gründe für einen Fehler wären beispielsweise:
>> - falls sed nicht installiert sein sollte, auch wenn es unwahrscheinlich
>> ist, wird die Datei nicht wieder zurückkopiert.
>> - falls "zufällig" (man murphy ;-) die Installation an genau dieser
>> Stelle abgebrochen wird, wird die Datei ebenfalls nicht mehr
>> zurückkopiert.

=> help trap

>Da bin ich gerade dabei, Sicherungen einzubauen. Aber an meiner
>/etc/ld.so.conf (s. o.) sieht man, dass das noch nicht läuft. ;-)

====
CONFIG="/etc/foo"

TMPFILE="`mktemp \"/tmp/${CONFIG}.$$.XXXXXX\"`" || exit 1

trap rm -f "${TMPFILE}" 1 2 3 13 14 15 EXIT

sed 's/foo/bar/' < "$CONFIG" > "${TMPFILE}" \
&& mv "${TMPFILE}" "${CONFIG}"
====

Das sollte hinreichend sicher sein.

>> > cat /etc/profile.tmp | sed '/openwin/ a\
>> > /opt/xfce4/bin \\' > /etc/profile
>>
>> Erstens: Useless use of cat!
>
>Jetzt, wo du es sagst. Ich benutze aber immer cat. Auch wenn ich mit
>grep eine Datei durchsuchen will. Keine Ahnung warum.
>
>Ich glaube, dass ich das mal am Anfang irgendwo gelesen habe, und dann
>hat es sich ins Hirn eingebrannt.

*tsk* Ich glaub, wir muessen dich mal einer Gehirnwaesche unterziehen...

>> Drittens: Der sed-Befehl beinhaltet ein gewisses Risiko. Derzeit kommt
>> "openwin" zwar nur einmal in /etc/profile vor, aber das könnte sich
>> jederzeit ändern und Dein Befehl würde Mist bauen...

ACK. Sowas muss man sehr gut testen. Bzw. das Muster auf die komplette
Zeile erweitern, und mittels ^ und $ verankern.

>Da hast du natürlich auch recht. Allerdings habe ich vor auf die .local
>Dateien auszuweichen. Aber natürlich könnte auch da etwas mehrfach
>vorkommen. Man weiß ja nie, was ein gelangweilter Admin rumwerkelt. ;-)

Solltest du. s.o. und meine anderen Mails.

>Ich habe mir überlegt, einfach nur diese Zeile in die /etc/profile.local
>einzufügen.
>
>export PATH="$PATH:/opt/xfce4/bin"
>
>Beim Löschen brauche ich dann nur nach exakt dieser Zeile zu suchen und
>kann die dann ohne Probleme löschen. Außer ich baue Mist beim Skript.

Jep. Besser waere aber u.U. ein wrapper-script in /usr/local/bin, das
die diversen Variablen setzt und dann xfce aufruft (s.o.).

>> Viertens: statt /etc/profile.tmp solltest Du einen
>> "unwahrscheinlicheren" Namen verwenden,
>> z. B. /etc/profile.tmp_Name-deines-Pakets_irgendwas-kryptisches
>> (für letzteres sollte das Abstauben der Tastatur reichen ;-)
>> Die Optimallösung wäre übrigens die Verwendung von mktemp.
>
>mktemp habe ich noch nie verwendet. Den ersten Zeilen der Manpage hört
>sich das aber recht interessant an.

s.o.

>Wahr für wahr. *heul* Ich könnt immer noch wegen meiner ld.so.conf
>schreien.

Naja, die laesst sich ja wirklich einfach leicht wiederherstellen. Zur
Not per rpm2cpio glibc-2...rpm | bunzip -c | cpio -i /etc/ld.so.conf

(Disclaimer: die Syntax von cpio hab ich jetzt nicht im Kopf!)

-dnh

--
If you haven't got time to RTFM, you haven't got time to whine on this
mailing list.

< Previous Next >
Follow Ups