Assim, em um diretório /home/pi/remoteinfo/temp/code
temos um programa C chamado a.out
e 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/code
, posso digitar ./tempstart.sh
e meu programa começará a ser executado.
Mas quando tento executar tempstart.h
de qualquer lugar fora de seu diretório, recebo
line 3: ./a.out: No such file or directory
.
O que está acontecendo e como posso corrigi-lo?
Estou usando um Raspberry Pi 3 com o sistema operacional padrão
O que está acontecendo é que o script executará o comando
./a.out
no diretório de trabalho atual, pois é isso que está escrito no script; se você executar o script de outro lugar, seu binário não está no diretório de trabalho atual, fazendo com que o shell lance o erro que você está vendo.Se você quiser usar o script para invocar o binário independentemente do diretório do qual ele é invocado, você tem pelo menos quatro opções:
a.out
em um diretório que já esteja no seuPATH
e pare de especificar o diretório de trabalho atual como o local dea.out
(por exemplo, movaa.out
para$HOME/bin/a.out
e altere o script para simplesmente executara.out
em vez de./a.out
)../a.out
, em vez de/path/to/the/location/of/a.out
)PATH
do script e não especifique o diretório atual como o local do binário (por exemplo,PATH="$PATH:/path/to/the/binary"; a.out
cd /path/to/the/binary; ./a.out
)./script.sh
assumiria que você está executando-o no mesmo diretório.Digamos que
a.out
esteja em/var/run/a.out
, você pode alterartempstart.sh
para conter esse caminho de arquivo completo.Nesse ponto, você pode executar o script de qualquer lugar (desde
a.out
que não exija que você esteja em um determinado diretório ao executá-lo).