Hallo, Am Fri, 19 Sep 2003, Jan Trippler schrieb:
Am Freitag, 19. September 2003 00:31 schrieb David Haller:
Am Thu, 18 Sep 2003, Jan Trippler schrieb: [...]
Das sieht mir schon wieder recht kompliziert aus ;) ich="$0" while -n "`readlink \"$ich\"`"; do
^^ da fehlt ein 'test '
ich="`readlink \"$ich\"`" done echo "ich bin $ich"
(ungetestet) ^^^^^^^^^^^^--------------------------------------------+ Schon mit relativen links getestet, ueber mehr als eine | "Verlinkungsebene"??? *eg* | siehe >----------------------------------------------------+
Das fiel mir später auch auf - siehe meine andere Mail.
*hihi*
[...]
Merkst du was, Jan? *scnr*
Schon passiert ;)
Ja, manchmal verrenke/verkompliziere ich mich unnoetig, diesmal aber nicht... ;)
Na, mal sehen *g*
Ok. Du hast es so gewollt... ==== /tmp/test4/test_foo.sh ==== #! /bin/bash for t in \ ./usr/bin/foo.sh \ ./usr/local/bin/foo.sh \ ./opt/bin/foo.sh \ ./opt/blubb/bin/foo.sh \ /tmp/test4/usr/bin/foo.sh \ /tmp/test4/usr/local/bin/foo.sh \ /tmp/test4/opt/bin/foo.sh \ /tmp/test4/opt/blubb/bin/foo.sh \ 'PATH="./usr/bin:$PATH" foo.sh' \ 'PATH="./usr/local/bin:$PATH" foo.sh' \ 'PATH="./usr/bin:./usr/local/bin:$PATH" foo.sh' \ 'PATH="./usr/local/bin:./usr/bin:$PATH" foo.sh' \ 'PATH="./opt/bin:$PATH" foo.sh' \ 'PATH="./opt/blubb/bin:$PATH" foo.sh' \ 'PATH="`pwd`/opt/bin:$PATH" foo.sh' \ 'PATH="`pwd`/opt/blubb/bin:$PATH" foo.sh' \ "cd ./usr/bin && ./foo.sh; cd -;" \ "cd ./usr/local/bin && ./foo.sh; cd -;" \ "cd ./opt/bin && ./foo.sh; cd -;" \ "cd ./opt/blubb/bin && ./foo.sh; cd -;" do echo "+ '$t'" eval "$t" echo done ==== dh@slarty[4]: /tmp/test4 (0)$ find . -name "foo.sh" -ls \ | awk '{print $3" "$7"\t"$11" "$12" "$13;}' lrwxrwxrwx 19 ./usr/bin/foo.sh -> ../local/bin/foo.sh lrwxrwxrwx 23 ./usr/local/bin/foo.sh -> ../../../opt/bin/foo.sh lrwxrwxrwx 19 ./opt/bin/foo.sh -> ../blubb/bin/foo.sh -rwxr--r-- 1112 ./opt/blubb/bin/foo.sh ==== /tmp/test4/opt/blubb/bin/foo.sh ==== #! /bin/sh find_real_name() { p="$1" if test -L "$1" then while test -L "$p" do d="`dirname \"$p\"`" test -d "$d" && cd "$d" || exit 1 p="`basename \"$p\"`" test -L "$p" && { r="`readlink \"$p\"`" || exit 2; } p="`pwd`/$r" done fi d="`dirname \"$p\"`" test -d "$d" && cd "$d" || exit 1 p="`basename \"$p\"`" rn="`pwd`/$p" echo "$rn" } IAM="$0" IAM="`find_real_name \"$IAM\"`" echo "IAM='$IAM'" ### End DH ### Jan 1 ich="$0" while test -n "`readlink \"$ich\"`"; do ich="`readlink \"$ich\"`" done echo "Jan1: ich bin $ich" ### Jan 2 ich="$0" p="`pwd`" while test -n "`readlink \"$ich\"`"; do d="`dirname \"$ich\"`" test -n "$d" && cd "$d" || exit 1 ich="`readlink \"\`basename \"$ich\"\`\"`" done cd "$p" echo "Jan2: ich bin $ich" ### Jan 3 p="`pwd`" while test -n "`readlink \"$ich\"`"; do d="`dirname \"$ich\"`" test -n "$d" && cd "$d" || exit 1 ich="`readlink \"\`basename \"$ich\"\`\"`" done # dies ergaenzen: ich="`pwd`/`basename \"$ich\"`" cd "$p" echo "Jan3: ich bin $ich" ==== Lass mal in /tmp/test4 "./test_foo.sh" durchlaufen... Achso, meine erste Version lieferte immerhin in 15/20 Faellen das richtige Ergebnis... -dn'*scnr*'h -- Wer heiratet kann Sorgen teilen, die er vorher nicht hatte.