iniciando executável a partir de / usr / local / bin precisa de acesso ao arquivo local

5

Eu tenho um executável, chamado "octano", que desejo lançar globalmente. O executável requer acesso a um binário local, "octane.dat", para ser executado.

Eu coloquei o diretório contendo o executável e o binário em / opt / as root e criei um link simbólico do executável em / usr / local / bin /. Agora, se eu digitar "octano" em qualquer lugar, ele inicia, mas gera um erro dizendo que ele não será executado sem o binário "octane.dat". O Octane só será iniciado se meu diretório de trabalho atual for o mesmo que o executável e binário, em / usr / local / bin.

Alguma sugestão sobre como corrigir isso? Tenho que tornar esse diretório global usando .bashrc?

Obrigado.

    
por kedmond 19.12.2012 / 18:10

1 resposta

5

Em vez do link simbólico, você pode criar um script wrapper em / usr / local / bin:

#! /bin/sh
cd /opt/octane
exec ./octane "$@"

Torne o script executável com chmod +x /usr/local/bin/octane .

Os "$ @" são os argumentos da linha de comando, portanto você ainda pode executar octane an_argument .

O script altera o CWD (diretório de trabalho atual) somente dentro do script, porque o script é executado em uma nova instância do shell que termina no final do script. Alterar o diretório de trabalho atual para o executável pode realmente ser um problema se você quiser fornecer um nome de caminho relativo para o executável. Por exemplo. se você estiver em seu diretório home e executar octane a_file_in_the_home_directory , ele não funcionará, porque o octane executable é chamado com um CWD de / opt / octane e a_file_in_the_home_directory não está em / opt / octane. Se isso for uma preocupação, lembre-se de fornecer apenas nomes de caminho absolutos ( octane ~/a_file_in_the_home_directory ) ou usar uma versão mais complicada do script.

    
por elmicha 19.12.2012 / 19:31