Wie kann ich ein kompiliertes Java- oder C-Programm aus einer Shell-Datei außerhalb ihres Verzeichnisses ausführen?

Wie kann ich ein kompiliertes Java- oder C-Programm aus einer Shell-Datei außerhalb ihres Verzeichnisses ausführen?

In einem Verzeichnis /home/pi/remoteinfo/temp/code gibt es also ein C-Programm namens a.outund eine Shell-Datei namens tempstart.sh.

Die Datei tempstart.sh enthält Folgendes:

#!/bin/bash
./a.out

Wenn ich jetzt drin bin, /home/pi/remoteinfo/temp/codekann ich tippen ./tempstart.shund mein Programm wird ausgeführt.

tempstart.hAber wenn ich versuche , es von einem beliebigen Ort außerhalb des Verzeichnisses auszuführen , erhalte ich die Meldung line 3: ./a.out: No such file or directory:

Was ist passiert und wie kann ich das Problem beheben?

Ich verwende einen Raspberry Pi 3 mit dem Standardbetriebssystem

Antwort1

Was passiert, ist, dass das Skript den Befehl im aktuellen Arbeitsverzeichnis ausführt ./a.out, da dies im Skript geschrieben ist. Wenn Sie das Skript von einem anderen Ort aus ausführen, wird Ihre Binärdateinicht indas aktuelle Arbeitsverzeichnis, wodurch die Shell den angezeigten Fehler ausgibt.

Wenn Sie das Skript zum Aufrufen der Binärdatei verwenden möchten, unabhängig davon, aus welchem ​​Verzeichnis es aufgerufen wird, haben Sie mindestens vier Optionen:

  • Legen Sie es a.outin ein Verzeichnis ab, das sich bereits in Ihrem Verzeichnis befindet PATH, und geben Sie nicht mehr das aktuelle Arbeitsverzeichnis als Speicherort von an a.out(verschieben Sie es z. B. a.outnach $HOME/bin/a.outund ändern Sie das Skript so, dass es einfach ausgeführt wird, a.outanstatt ./a.out).
  • Lassen Sie das Skript explizit den vollständigen Pfad zur Binärdatei aufrufen (z. B. statt ./a.out, stattdessen /path/to/the/location/of/a.out).
  • Fügen Sie das Skript hinzu zues ist PATHder Speicherort des Skripts und geben Sie nicht das aktuelle Verzeichnis als Speicherort der Binärdatei an (z. B.PATH="$PATH:/path/to/the/binary"; a.out
  • Habe das SkriptSatzdas Arbeitsverzeichnis zum Speicherort des Skripts, bevor Sie versuchen, es auszuführen (zB cd /path/to/the/binary; ./a.out)

Antwort2

./script.shwürde davon ausgehen, dass Sie es im selben Verzeichnis ausführen.

Angenommen a.out, es befindet sich in /var/run/a.out. Sie können es so ändern, tempstart.shdass der vollständige Dateipfad enthalten ist.

An diesem Punkt können Sie das Skript von überall aus ausführen (vorausgesetzt, a.outSie müssen sich beim Ausführen nicht in einem bestimmten Verzeichnis befinden).

verwandte Informationen