Como obter o diretório de um script de origem no RedHat 6 com bash [duplicate]

0

Estou tentando obter o caminho do script que estou pesquisando. Eu estou fazendo o seguinte:

DIR="$(dirname "$(readlink -f "$0")")"

No entanto, recebo

readlink: invalid option -- 'b'

Estou em uma máquina RedHat 6 usando o bash. Não tenho certeza se devo fazer isso de uma maneira diferente.

    
por WooWapDaBug 02.02.2018 / 14:32

2 respostas

1

Use ${BASH_SOURCE[-1]} :

script_dir=$( dirname "$( readlink -f "${BASH_SOURCE[-1]}" )" )

Esta é uma matriz que contém os arquivos de origem para a pilha de chamadas da função shell atual, e o último elemento dela será a origem do script principal.

Isso deve funcionar independentemente de o script ser originado com source ou não.

A versão específica de bash que você está usando é a versão 4.2.1. Índices negativos em matrizes (referências do final da matriz) foram adicionados na versão 4.3. Para obter o mesmo efeito de usar ${BASH_SOURCE[-1]} em uma versão pré-4.3 de bash , use

${BASH_SOURCE[ ${#BASH_SOURCE[@]} - 1 ]}
    
por 02.02.2018 / 14:59
0

Se eu entendi corretamente, isso deve funcionar:

whereami=$(pwd)
echo $whereami
    
por 02.02.2018 / 14:43

Tags