Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ziel des Symlinks mitsamt Pfad ausgeben

1 view
Skip to first unread message

Helmut Schneider

unread,
Feb 10, 2009, 11:16:26 AM2/10/09
to
Hi,

siehe Subjekt, FreeBSD kennt realpath, OpenBSD nicht, dafür kennen beide
readlink, welches mir aber nur das Ziel ohne Pfad zurück gibt, "stat -L" tut
nicht, wie in der Hilfe ver[sprochen|standen].

Wie finde ich Dialekt-übergreifend ("mit der /bin/sh") das Ziel eines Links
mitsamt Pfad? Ich möchte "find" damit füttern:

for _LIB in `ldd -f "%p\n" ${_BIN} 2>/dev/null`; do
if [ -h ${_LIB} ]; then
_LIB=`$gesuchtes_tool ${_LIB}
fi
find ${_LIB} | cpio -dp ${OPT_DEST}
done

Danke und Gruß, Helmut

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn

Bernd Eggink

unread,
Feb 10, 2009, 5:06:24 PM2/10/09
to
On Tue, 10 Feb 2009 17:16:26 +0100, Helmut Schneider <jump...@gmx.de>
wrote:

> Hi,
>
> siehe Subjekt, FreeBSD kennt realpath, OpenBSD nicht, dafür kennen beide
> readlink, welches mir aber nur das Ziel ohne Pfad zurück gibt, "stat -L"
> tut nicht, wie in der Hilfe ver[sprochen|standen].
>
> Wie finde ich Dialekt-übergreifend ("mit der /bin/sh") das Ziel eines
> Links mitsamt Pfad? Ich möchte "find" damit füttern:
>
> for _LIB in `ldd -f "%p\n" ${_BIN} 2>/dev/null`; do
> if [ -h ${_LIB} ]; then
> _LIB=`$gesuchtes_tool ${_LIB}
> fi
> find ${_LIB} | cpio -dp ${OPT_DEST}
> done
>
> Danke und Gruß, Helmut
>

Ich habe dafür mal eine Funktion geschrieben, die unter bash und ksh
läuft; vielleicht kannst Du sie für sh anpassen:

http://www.sudrala.de/de_d/shell-getlink.html

Gruß,
Bernd

--
Bernd Eggink
http://sudrala.e

Bernd Hohmann

unread,
Feb 10, 2009, 5:19:18 PM2/10/09
to
Helmut Schneider schrieb:

> siehe Subjekt, FreeBSD kennt realpath, OpenBSD nicht, dafür kennen beide
> readlink, welches mir aber nur das Ziel ohne Pfad zurück gibt, "stat -L" tut
> nicht, wie in der Hilfe ver[sprochen|standen].

readlink -f (zumindest unter Ubuntu)

# resolve symlink of this script and get
# ZT home directory (basename, dirname)
zt_path=$(readlink -f $0)
zt_dir=$(dirname $zt_path)
zt_scr=$(basename $zt_path)

Hier habe ich ein Startscript unter /home/bernd was einen Symlink auf
sich selber nach /etc/init.d/ erstellt. Beim Booten lese ich damit
heraus dass das Script in /home/bernd steht.

Bernd

--
Well, there's egg and bacon; egg sausage and bacon; egg and
nos...@spamonly.de ; egg bacon and spam; egg bacon sausage
and kuc...@spamonly.net ; spam bacon sausage and spam;spam
egg spam spam bacon and nos...@nixwill.de ; spam sausage

Helmut Schneider

unread,
Feb 11, 2009, 11:23:55 AM2/11/09
to
Bernd Eggink <mon...@sudrala.de> wrote:
> On Tue, 10 Feb 2009 17:16:26 +0100, Helmut Schneider <jump...@gmx.de>
> wrote:
>
>> siehe Subjekt, FreeBSD kennt realpath, OpenBSD nicht, dafür kennen
>> beide readlink, welches mir aber nur das Ziel ohne Pfad zurück gibt,
>> "stat -L" tut nicht, wie in der Hilfe ver[sprochen|standen].
>>
>> Wie finde ich Dialekt-übergreifend ("mit der /bin/sh") das Ziel eines
>> Links mitsamt Pfad? Ich möchte "find" damit füttern:
>>
>> for _LIB in `ldd -f "%p\n" ${_BIN} 2>/dev/null`; do
>> if [ -h ${_LIB} ]; then
>> _LIB=`$gesuchtes_tool ${_LIB}
>> fi
>> find ${_LIB} | cpio -dp ${OPT_DEST}
>> done
>
> Ich habe dafür mal eine Funktion geschrieben, die unter bash und ksh
> läuft; vielleicht kannst Du sie für sh anpassen:
>
> http://www.sudrala.de/de_d/shell-getlink.html

Ich bin erstaunt, ich dachte, ich "blamiere" mich, das Thema ist zu gähnen,
aber offensichtlich... :)

Ich hab jetzt mal ne OS-Weiche programmiert.

Sven Mascheck

unread,
Feb 11, 2009, 3:27:45 PM2/11/09
to
Bernd Eggink wrote:

> Ich habe dafür mal eine Funktion geschrieben, die unter bash und ksh
> läuft; vielleicht kannst Du sie für sh anpassen:
>
> http://www.sudrala.de/de_d/shell-getlink.html

Es wird "shopt -s dotglob" gesetzt, obwohl keine
pathname expansion verwendet wird?

Es wird [[ ]] verwendet, aber die Variablen dennoch mit "" geschützt.
Wenn "" zum Schutz ausreicht: ohne [[ läuft es in allen POSIX Shells.

Für den BUGS Abschnitt [1]:

- Symlinknamen, die selbst " -> " enthalten, werden nicht korrekt
ausgewertet. (Es wäre möglich, da das Format von ls robust und
das von POSIX ls sogar standardisiert ist.)

- Symlinks, die auf Directories zeigen, werden nicht zuverlässig
ausgewertet. Es zählt dabei auch, ob der Symlinkname mit /
abgeschlossen wurde.

[1] und zwar im traditionellen Sinne einer Manpage:
Ein Mängel, der mglw. nach Abwägung nicht gefixt wird,
aber dann zumindest bekannt sein sollte.

Sven Mascheck

unread,
Feb 11, 2009, 6:04:55 PM2/11/09
to
Sven Mascheck wrote:

> (Es wäre möglich, da das Format von ls robust und
> das von POSIX ls sogar standardisiert ist.)

Aber das wird doch nicht mal benötigt.
Es reicht ja völlig aus, daß ls alle
gültigen Zeichen buchstäblich ausgibt.

Bernd Eggink

unread,
Feb 12, 2009, 4:10:13 AM2/12/09
to
On Wed, 11 Feb 2009 21:27:45 +0100, Sven Mascheck <masc...@email.invalid>
wrote:

> Bernd Eggink wrote:
>
>> Ich habe dafür mal eine Funktion geschrieben, die unter bash und ksh
>> läuft; vielleicht kannst Du sie für sh anpassen:
>>
>> http://www.sudrala.de/de_d/shell-getlink.html
>
> Es wird "shopt -s dotglob" gesetzt, obwohl keine
> pathname expansion verwendet wird?

Ups - ein historisches Relikt, das hier nicht hingehört, zumal
die Option bei ksh gar nicht existiert.

> Es wird [[ ]] verwendet, aber die Variablen dennoch mit "" geschützt.

Ja, ist nicht konsequent, aber schadet auch nicht. Hab's
den Puristen zuliebe geändert.

> Wenn "" zum Schutz ausreicht: ohne [[ läuft es in allen POSIX Shells.
>
> Für den BUGS Abschnitt [1]:
>
> - Symlinknamen, die selbst " -> " enthalten, werden nicht korrekt
> ausgewertet. (Es wäre möglich, da das Format von ls robust und
> das von POSIX ls sogar standardisiert ist.)

Stimmt. Scheint mir aber nicht der Mühe wert zu sein, da solche Namen
in der freien Wildbahn wohl kaum vorkommen.

> - Symlinks, die auf Directories zeigen, werden nicht zuverlässig
> ausgewertet. Es zählt dabei auch, ob der Symlinkname mit /
> abgeschlossen wurde.

Stimmt. Ist repariert. Danke für die Hinweise!

0 new messages