Como executar um script de outro caminho e conhecer o caminho do script?

8

Eu preciso executar um script que acesse um arquivo no mesmo caminho em que ele está localizado.

Por exemplo: eu tenho o script em /home/me/folder/script.sh e esse script acessará o arquivo /home/me/folder/myfile . Como o arquivo está no mesmo caminho do script, eu só uso o nome myfile , não o caminho completo.

Mas se eu o executar a partir de /tmp/ , como:

/tmp$ /home/me/folder/script.sh

isso me dá:

myfile: No such file or directory

Então, como posso dizer no script que o arquivo está no mesmo caminho que o próprio script?

    
por Tom Brito 29.03.2011 / 19:52

3 respostas

8

Que tal $(dirname "$0")/myfile ?

    
por 29.03.2011 / 20:00
9

Você não pode saber em todas as circunstâncias, mas frequentemente (nem sempre) quando você executa um script por caminho em vez de permitir a pesquisa de shell $PATH , o caminho para o script estará em $0 . Você pode usar dirname "$0" ou ${0%/*} para obter o caminho.

    
por 29.03.2011 / 20:20
4

Eu normalmente faria algo assim na cabeça do meu script:

SCRIPTDIR=$(dirname "$0")

Ou, para obter o nome completo do caminho para o diretório do script (em vez de um nome de caminho relativo):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Em seguida, basta referenciar ${SCRIPTDIR} quando necessário.

    
por 30.03.2011 / 10:18