Re: [SSFR] Partage de fonctions ...

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


Hello

C'est tout sauf une solution "simple", mais c'est celle que j'utiliserai (dérivée d'une fonction resolve_links):
function abspath {
       OWD=${2:-$(pwd)}
       if [ -e "$1" ]; then
               f_dir="$(dirname "$1")"
               f_name="$(basename "$1")"
               cd "$f_dir"
               if [ -L "$f_name" ]; then
                       # Follow Symlink
                       aim=$(stat "$f_name"  \
                             | grep File:  \
                             | tr '\047' '`'  \
                             | sed -e 's,.*-> `\([^`]*\).*$,\1,')
                       abspath "$aim" "$OWD"
               else echo "$(pwd)/$f_name"
               fi
       else echo "$1: No such file or directory, or broken link" >&2
       fi
       cd "$OWD"
}

Sûrement buguée, pas portable, et pas exhaustive, mais c'est une piste.
Mais effectivement, c'est une fonction qui manque bougrement.

Me demandez pas d'où sortent les "" imbriqués; ça marche et je sais pas pourquoi. :)

Philippe



omer a écrit :
Bonjour,

Salut,

Quelles fonctions, concoctees par vos soins, utilisez vous le plus souvent
?

Puisqu'on en parle, il y en a une que je cherche depuis longtemps sans avoir trouvé de solution simple. Il s'agit de l'équivalent de la fonction os.path.abspath de python (ou canonicalize_filename de glibc). Autrement dit une fonction qui prend un nom de fichier en paramètre et retourne un chemin absolu et unique ne contenant aucun ., .. ou lien symbolique. Tout ce que j'ai trouvé est une fonction shell horriblement compliquée, ou alors cette solution qui ne me plait pas trop :

abspath()
{
  python -c "import os; print(os.path.abspath(\"$1\"))
}

Quelqu'un aurait une solution simple en shell (bash) uniquement ? Ca m'a toujours surpris qu'il n'y ait pas un outil pour ça dans fileutils est-ce que je l'aurais raté ?

merci,




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/