¿Cómo se puede ejecutar un programa java o c compilado desde un archivo de shell desde fuera de su directorio?

¿Cómo se puede ejecutar un programa java o c compilado desde un archivo de shell desde fuera de su directorio?

Entonces, en un directorio /home/pi/remoteinfo/temp/code hay un programa C llamado a.outy 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/codepuedo escribir ./tempstart.shy mi programa comenzará a ejecutarse.

Pero cuando intento ejecutar tempstart.hdesde 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.outen 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.outen un directorio que ya esté en su PATHy deje de especificar el directorio de trabajo actual como ubicación a.out(por ejemplo, muévase a.outa $HOME/bin/a.outy cambie el script para simplemente ejecutarlo a.outen 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 PATHla 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.shSupondría que lo está ejecutando en el mismo directorio.

Digamos a.outque está en /var/run/a.out, podría cambiarlo tempstart.shpara que contenga esa ruta de archivo completa.

En ese momento, podría ejecutar el script desde cualquier lugar (siempre que a.outno requiera que esté en un directorio determinado al ejecutarlo).

información relacionada