Gostaria de recuperar o nome absoluto do arquivo de script que está sendo executado no momento. Os links também devem ser resolvidos.
No Linux, isso parece ser feito assim:
$(readlink -mn "$0")
mas readlink
parece funcionarmuitodiferentemente no Mac OS X.
Eu li que isso é feito usando
$(realpath $0)
no BSD, mas isso também não funciona. O Mac OS X não possui realpath
.
Qualquer ideia?
Responder1
Eu trapaceio e uso perl exatamente para isso:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
Você pensaria que eu escreveria o script inteiro em perl, e muitas vezes o faço, mas nem sempre.
Responder2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
Responder3
Isso lida com combinações de links simbólicos e funciona em arquivos e pastas:
#!/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
}
Mas não suporta --relative-to do realpath. Isso exigiria a conversão descrito aqui.
Responder4
Outra abordagem:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help