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,