Que tal $(dirname "$0")/myfile
?
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?
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.
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.
Tags shell scripting path shell-script