15

Я хотел бы получить простой способ получить полный путь к файлу. Я сейчас набираю это:

echo `pwd`/file.ext

Пытаясь сократить его, я сделал псевдоним bash:

alias fp='echo `pwd`/'

Но теперь, если я fp file.ext , между / и file.ext .

Такая команда уже существует, и мне ее не хватает? Если нет, то как мне создать псевдоним или функцию в bash?

4 ответа4

19

В системах Linux у вас должна быть установлена readlink из проекта GNU coreutils, и вы можете сделать это:

readlink -f file.ext

В системах Debian/ Ubuntu может быть установлена утилита realpath, которая «предоставляет в основном те же функции, что и /bin/readlink -f в пакете coreutils».

6

Вместо команды pwd используйте переменную PWD (она также есть в POSIX):

fp () {
  case "$1" in
    /*) printf '%s\n' "$1";;
    *) printf '%s\n' "$PWD/$1";;
  esac
}

Если вам требуется поддержка Windows, распознавание абсолютных путей будет более сложным, поскольку у каждого порта инструментов Unix есть свои правила для преобразования путей к файлам. С Cygwin используйте утилиту cygpath .

4

чтобы ответить на ваш вопрос с тем, что вы используете прямо сейчас:

псевдоним расширяется в той позиции, где вы печатаете прямо сейчас. Вы ввели:

% fp<SPACE>file.ext

это становится

% echo `pwd`<SPACE>file.exe

Вы можете использовать функцию, чтобы избежать этого:

function fp() {
    echo `pwd`/"$1"
}

Вы можете использовать это как обычно:

% fp file.ext
3

Ты можешь использовать:

realpath file.ext

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .