O problema é que você está usando caminhos relativos no script: ./Linux/lib
, ./foo
. Esses caminhos são relativos ao diretório atual. O diretório atual do processo que está executando o script é o diretório atual de qualquer processo que o tenha lançado; Não tem nada a ver com a localização do script. Quando você executa o script clicando em um ícone da área de trabalho, o diretório atual é seu diretório pessoal.
Uma solução é adicionar um comando cd
no script, para mudar para o diretório em que o aplicativo está instalado.
#!/bin/sh
cd /home/xyz/Software/Test/
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:./Linux/lib"
exec ./foo --gc=sgen
Mas seria mais útil não alterar o diretório atual e, em vez disso, usar caminhos absolutos. Dessa forma, você pode usar o script para abrir arquivos no diretório atual, por exemplo. Enquanto estou nisso, adicionei "$@"
à invocação de foo
, que transmite os argumentos na linha de comando do script para o aplicativo.
#!/bin/sh
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/xyz/Software/Test/Linux/lib"
exec /home/xyz/Software/Test/foo --gc=sgen "$@"
Se o script estiver localizado no diretório do aplicativo, você poderá detectar sua própria localização. $0
é o caminho para o script. ${0%/*}
é o caminho para o script com tudo depois da última barra, ou seja, o caminho para o diretório que contém o script.
#!/bin/sh
foo_directory="${0%/*}"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$foo_directory/lib"
exec "$foo_directory/foo" --gc=sgen "$@"
Tenha em atenção que, se LD_LIBRARY_PATH
estiver inicialmente vazio, está a adicionar o diretório atual, o que pode não ser uma boa ideia. Você deveria testá-lo.
#!/bin/sh
foo_directory="${0%/*}"
if [ -n "$LD_LIBRARY_PATH" ]; then
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$foo_directory/lib"
else
export LD_LIBRARY_PATH="$foo_directory/lib"
fi
exec "$foo_directory/foo" --gc=sgen "$@"
ou (supondo que você não use entradas vazias em LD_LIBRARY_PATH
, o que é uma escolha sensata)
#!/bin/sh
foo_directory="${0%/*}"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$foo_directory/lib"
LD_LIBRARY_PATH="${LD_LIBRARY_PATH#:}"
exec "$foo_directory/foo" --gc=sgen "$@"