Os arquivos chamados com caminhos relativos em /usr/bin/mydir/myexec
serão pesquisados em relação ao diretório de trabalho atual de onde o script foi executado. Provavelmente seu script atualmente só funciona se for executado a partir de /usr/bin/mydir
no momento.
Uma maneira de resolver isso é dando caminhos absolutos para os arquivos incluídos (mas o script precisa ser atualizado se os arquivos desejados forem movidos), ou você precisa descobrir o caminho absoluto dinamicamente com readlink
, eg
THISFILE=$(readlink -f -- "${0}")
THISDIR=${THISFILE%/*}
. "${THISDIR}/my_settings_file"
-
readlink -f
retornará o destino do link simbólico. - O
${THISFILE%/*}
retornará o destino do symlink com a parte incluindo e após o último/
removido, ou seja, o caminho para o arquivo em questão. -
${THISDIR}
agora contém o caminho absoluto para o arquivo e pode ser usado como na linha 3.
Eu assumi a questão em questão um shell script. Outras línguas podem ter métodos diferentes.
Outra maneira de resolvê-lo, evitando o problema mais ou menos, é criar um pequeno script em /usr/bin/myexec
que contenha, por exemplo,
#!/bin/sh
cd /usr/bin/mydir
./myexec