
Entonces, en un directorio /home/pi/remoteinfo/temp/code
hay un programa C llamado a.out
y un archivo shell llamado tempstart.sh
.
Dentro del archivo tempstart.sh se encuentra lo siguiente:
#!/bin/bash
./a.out
Ahora, cuando esté dentro, /home/pi/remoteinfo/temp/code
puedo escribir ./tempstart.sh
y mi programa comenzará a ejecutarse.
Pero cuando intento ejecutar tempstart.h
desde cualquier lugar fuera de su directorio, aparece
line 3: ./a.out: No such file or directory
.
¿Qué está pasando y cómo puedo solucionarlo?
Estoy usando una Raspberry Pi 3 con el sistema operativo predeterminado
Respuesta1
Lo que sucede es que el script ejecutará el comando ./a.out
en el directorio de trabajo actual, ya que eso es lo que está escrito en el script; Si ejecuta el script desde otro lugar, su binario esno enel directorio de trabajo actual, lo que hace que el shell arroje el error que estás viendo.
Si desea utilizar el script para invocar el binario independientemente del directorio desde el que se invoca, tiene al menos cuatro opciones:
- Colóquelo
a.out
en un directorio que ya esté en suPATH
y deje de especificar el directorio de trabajo actual como ubicacióna.out
(por ejemplo, muévasea.out
a$HOME/bin/a.out
y cambie el script para simplemente ejecutarloa.out
en lugar de./a.out
). - Haga que el script llame explícitamente a la ruta completa al binario (por ejemplo
./a.out
, en lugar de , en lugar de/path/to/the/location/of/a.out
) - Haga que el script se agregue aes
PATH
la ubicación del script y no especifique el directorio actual como la ubicación del binario (p. ej.PATH="$PATH:/path/to/the/binary"; a.out
- tener el guióncolocarel directorio de trabajo a la ubicación del script antes de intentar ejecutarlo (p. ej
cd /path/to/the/binary; ./a.out
.)
Respuesta2
./script.sh
Supondría que lo está ejecutando en el mismo directorio.
Digamos a.out
que está en /var/run/a.out
, podría cambiarlo tempstart.sh
para que contenga esa ruta de archivo completa.
En ese momento, podría ejecutar el script desde cualquier lugar (siempre que a.out
no requiera que esté en un directorio determinado al ejecutarlo).