readlink -f альтернатива в Linux 2.4

У меня есть приложение Java. И я вызываю некоторые командные файлы из приложения. Пакетный файл получает полный путь к себе, используя readlink -f. Но я получаю "ошибка команды не найдена" в Linux (Linux 2.4.18-3custom #2 Wed Aug 18 03:46:33 EDT 2004). Я попробовал команду pwd в командном файле. Но он дал текущему каталогу моего приложения. Но мне нужно найти командный каталог из себя. Так,pwd не решает мою проблему. На самом деле я пишу свой командный файл на сценарии оболочки. И я не могу установить coreutils. Есть ли альтернатива для readlink -f, которая не включает pwd?

2 ответа

Это пример переадресованного решения из моего неактивного блога на Linuxquestions.org. Вы можете заставить свой сценарий использовать это, чтобы получить абсолютный путь пути. Этот работает с любой версией Bash. Вы также можете получить другие решения для других оболочек, даже старых. Просто проверьте почту.

function getabspath {
    local -a T=()
    local -i I=0
    local IFS=/ A

    case "$1" in
    /*)
        __=$1
        ;;
    *)
        __=/$PWD/$1
        ;;
    esac

    while read -r -d / A; do
        case "$A" in
        ..)
            [[ I -ne 0 ]] && unset T\[--I\]
            continue
            ;;
        .|'')
            continue
            ;;
        esac

        T[I++]=$A
    done << .
$__/
.

    case "$1" in
    */)
        [[ I -ne 0 ]] && __="/${T[*]}/" || __=/
        ;;
    *)
        [[ I -ne 0 ]] && __="/${T[*]}" || __=/.
        ;;
    esac
}

Использование:

getabspath your/path/here
<Do something with "$__">

Также рассмотрите возможность составления простого C-решения.

readlink является частью coreutils пакет для Linux. Так что просто установите coreutils в вашей системе, и вы будете иметь readlink имеется в наличии.

Другие вопросы по тегам