2009-08-07 11 views
4

Sur un système GNU, j'utiliserais simplement readlink -f $SOME_PATH, mais Solaris n'a pas de lien de lecture.canonicalize un nom de chemin sur solaris

Je préférerais quelque chose qui fonctionne bien dans bash, mais d'autres programmes sont ok si nécessaire. Le meilleur que j'ai trouvé jusqu'à présent utilise cd et pwd, mais nécessite plus de hackery pour traiter les fichiers et pas seulement les répertoires.

cd -P "$*" 
REAL_PATH=`pwd` 
+1

Pourquoi ne pas simplement télécharger et construire le paquet GNU coreutils, et utiliser le lien de lecture de celui-ci? J'ai fait ça sur SunOS et Darwin et ça a bien marché. –

Répondre

3

Est-ce que this aide? A partir de la page référencée:

Créez un fichier appelé canonicalize avec ces contenus:

#!/bin/bash 
cd -P -- "$(dirname -- "$1")" && 
printf '%s\n' "$(pwd -P)/$(basename -- "$1")" 

Faire le fichier exécutable:

chmod +x canonicalize` 

Et enfin:

[email protected]$ canonicalize ./bash_profile 
+0

Ah oui, ça va le faire. – alberge

+0

Vous devriez vraiment indiquer la solution réelle. Nous ne pouvons même pas garantir que wikipedia.org restera pour toujours, et encore moins 'publicobject.com' –

+0

J'ai ajouté un extrait de la page référencée. –

1
#!/bin/bash 

# Resolves a full path 
# - alternative to "readlink -f", which is not available on solaris 
canonicalpath() { 
    if [ -d $1 ]; then 
    pushd $1 > /dev/null 2>&1 
    echo $PWD 
    elif [ -f $1 ]; then 
    pushd $(dirname $1) > /dev/null 2>&1 
    echo $PWD/$(basename $1) 
    else 
    echo "Invalid path $1" 
    fi 
    popd > /dev/null 2>&1 
} 
5

Peut-être ov erkill, mais il s'agit d'un système d'exploitation portable, et il n'a pas besoin de trouver d'abord le nom du répertoire ni les binaires de bas de page. Ce one-liner fonctionne. Passez simplement votre nom de fichier où vous voyez $ origFile:

perl -e "utilisez Cwd chemin réel; print realpath (\" $ origFile \ ");"

+1

Cela fonctionne très bien pour la situation habituelle; malheureusement, 'Cwd :: realpath' est un peu plus lent dans Solaris que dans Linux (perl 5.10 sur les deux) –

+0

Ce n'est pas un système d'exploitation portable pour Windows, car realpath va afficher les chemins Windows avec des barres obliques au lieu de barres obliques inverses. Ceci est indésirable dans de nombreux cas. –

+0

Dans le cas où vous voulez l'autre type de barres obliques sur Windows, vous pouvez utiliser une expression rationnelle Perl juste là pour le changer, avec un conditionnel pour le faire sous Windows. Perl rend cela assez facile, et ça peut toujours être un one-liner. – Yavin5

Questions connexes