
Portanto, em um diretório /home/pi/remoteinfo/temp/code
há 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 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.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 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.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
). - 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 é
PATH
a 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.sh
presumiria que você o está executando no mesmo diretório.
Digamos a.out
que esteja em /var/run/a.out
, você pode alterar tempstart.sh
para conter o caminho de arquivo completo.
Nesse ponto, você poderá executar o script de qualquer lugar (desde que a.out
não exija que você esteja em um determinado diretório ao executá-lo).