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 está localizado.

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

Mas se eu executar /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?

Tom Brito
fonte
Você pode mostrar qual é o uso do myfile aqui?
Faheem Mitha 29/03
@ Faheem Mitha: é apenas mais um script que meu script.sh chama.
Tom Brito
Alguma razão para você não querer usar o caminho completo ou mover ambos para o PATH?
Faheem Mitha 29/03
1
@ Faaem Mitha: Eu quero poder mover esta pasta com os scripts para outro lugar, talvez até outro computador, sem precisar reescrever o caminho do meu arquivo.
Tom Brito

Respostas:

8

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

alex
fonte
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 que o shell procure $PATH, o caminho para o script estará $0. Você pode usar dirname "$0"ou ${0%/*}para obter o caminho.

geekosaur
fonte
4

Normalmente, eu faria algo assim no início do meu script:

SCRIPTDIR=$(dirname "$0")

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

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

Depois, faça a referência ${SCRIPTDIR}onde for necessário.

Richard Downer
fonte