Como posso recuperar o nome do arquivo absoluto em um script de shell no Mac OS X?

17

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?

    
por Huxi 13.07.2009 / 22:54

3 respostas

19

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.

    
por 13.07.2009 / 23:09
25
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
    
por 10.07.2012 / 14:35
0

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 .

    
por 28.11.2018 / 22:24