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 -fretornará 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