2009-08-07 4 views
4

В системе GNU я бы просто использовал readlink -f $SOME_PATH, но Solaris не имеет readlink.canonicalize имя пути на solaris

Я бы предпочел что-то, что хорошо работает в bash, но другие программы в порядке, если это необходимо.

Редактировать: Лучшее, что я использовал до сих пор, использует cd и pwd, но требует еще нескольких хакеров для обработки файлов, а не только каталогов.

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

Почему бы просто не скачать и не построить пакет GNU coreutils, а использовать эту ссылку для чтения? Я делаю это как на SunOS, так и на Darwin, и все работает нормально. –

ответ

3

this help? На указанной странице:

Создайте файл с именем canonicalize с этим содержимым:

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

сделать файл исполняемым:

chmod +x canonicalize` 

И, наконец:

[email protected]$ canonicalize ./bash_profile 
+0

Ах да, это будет. – alberge

+0

Вы действительно должны указать фактическое решение. Мы даже не можем гарантировать, что wikipedia.org будет храниться навсегда, не говоря уже о «publicobject.com» –

+0

. Я добавил выдержку со ссылочной страницы. –

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

Может быть erkill, но это ОС переносимый, и не нужно сначала искать имена файлов dirname или basename. Этот однострочный файл работает. Просто перейдите в свое имя, где вы видите $ origFile:

perl -e "использовать CWD realpath; print realpath (\" $ origFile \ ");"

+1

Это отлично подходит для обычной ситуации; К сожалению, 'Cwd :: realpath' довольно немного медленнее в Solaris по сравнению с Linux (perl 5.10 на обоих) –

+0

Это не ОС, переносимая Windows, поскольку realpath будет выводить пути Windows с помощью косой черты вместо обратных косых черт. Во многих случаях это нежелательно. –

+0

В случае, если вы хотите использовать другой вид косой черты в Windows, вы можете использовать регулярное выражение Perl, чтобы переключить его, с условием для этого в Windows. Perl делает это достаточно легко, и он все равно может быть однострочным. – Yavin5