Eu faço batota e uso perl para isso mesmo:
#!/bin/bash
dirname='perl -e 'use Cwd "abs_path";print abs_path(shift)' $0'
echo $dirname
Você pensaria que eu apenas escreveria o script inteiro em perl, e muitas vezes eu faço, mas nem sempre.
Gostaria de recuperar o nome de arquivo absoluto do arquivo de script atualmente executado. Os links também devem ser resolvidos.
No Linux, isso parece ser feito assim:
$(readlink -mn "$0")
mas readlink
parece funcionar muito diferentemente 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
.
Alguma ideia?
Eu faço batota e uso perl para isso mesmo:
#!/bin/bash
dirname='perl -e 'use Cwd "abs_path";print abs_path(shift)' $0'
echo $dirname
Você pensaria que eu apenas escreveria o script inteiro em perl, e muitas vezes eu faço, mas nem sempre.
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
Isso lida com combos 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 o --relative-to do realpath. Isso exigiria a conversão descrita aqui .