Como executar um programa java ou c compilado a partir de um arquivo shell fora de seu diretório?

Como executar um programa java ou c compilado a partir de um arquivo shell fora de seu diretório?

Portanto, em um diretório /home/pi/remoteinfo/temp/code há um programa C chamado a.oute um arquivo shell chamado tempstart.sh.

Dentro do arquivo tempstart.sh está o seguinte:

#!/bin/bash
./a.out

Agora, quando estou dentro, /home/pi/remoteinfo/temp/codeposso digitar ./tempstart.she meu programa começará a ser executado.

Mas quando tento executar tempstart.hde qualquer lugar fora do diretório, recebo line 3: ./a.out: No such file or directory.

O que está acontecendo e como posso consertar isso?

Estou usando um Raspberry Pi 3 com o sistema operacional padrão

Responder1

O que está acontecendo é que o script executará o comando ./a.outno diretório de trabalho atual, pois é isso que está escrito no script; se você executar o script de outro lugar, seu binário seránão emo diretório de trabalho atual, fazendo com que o shell gere o erro que você está vendo.

Se quiser usar o script para invocar o binário independentemente do diretório do qual ele é invocado, você tem pelo menos quatro opções:

  • Coloque a.outem um diretório que já esteja no seu PATHe pare de especificar o diretório de trabalho atual como o local de a.out(por exemplo, mova a.outpara $HOME/bin/a.oute altere o script para simplesmente executar a.outem vez de ./a.out).
  • Faça com que o script chame explicitamente o caminho completo para o binário (por exemplo, em vez de ./a.out, em vez de /path/to/the/location/of/a.out)
  • Faça com que o script seja adicionado aisso é PATHa localização do script e não especifique o diretório atual como a localização do binário (por exemploPATH="$PATH:/path/to/the/binary"; a.out
  • Tenha o roteirodefiniro diretório de trabalho para o local do script antes de tentar executá-lo (por exemplo cd /path/to/the/binary; ./a.out)

Responder2

./script.shpresumiria que você o está executando no mesmo diretório.

Digamos a.outque esteja em /var/run/a.out, você pode alterar tempstart.shpara conter o caminho de arquivo completo.

Nesse ponto, você poderá executar o script de qualquer lugar (desde que a.outnão exija que você esteja em um determinado diretório ao executá-lo).

informação relacionada