Я хотел бы получить абсолютное имя файла скрипта, который в данный момент выполняется. Ссылки также должны быть разрешены.
В Linux это делается примерно так:
$(readlink -mn "$0")
но, readlink
кажется, работаеточеньпо-другому в Mac OS X.
Я читал, что это делается с помощью
$(realpath $0)
в BSD, но это тоже не работает. В Mac OS X нет realpath
.
Есть идеи?
решение1
Я схитрила и использую Perl именно для этой цели:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
Можно было бы подумать, что я просто напишу весь скрипт на Perl, и часто я так и делаю, но не всегда.
решение2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
решение3
Это обрабатывает комбинации символических ссылок и работает с файлами и папками:
#!/usr/bin/env bash
realpath()
{
if ! pushd $1 &> /dev/null; then
pushd ${1##*/} &> /dev/null
echo $( pwd -P )/${1%/*}
else
pwd -P
fi
popd > /dev/null
}
Но он не поддерживает realpath--relative-to. Это потребовало бы преобразования описано здесь.
решение4
Другой подход:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help