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