2010-10-17 13 views
7

Ich möchte ein Programm über Skript ausführen. normalerweise gebe ich ./program in die Shell ein und das Programm startet.Linux: Führen Sie eine Binärdatei in einem Skript

mein Skript sieht wie folgt aus:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
sh program 

es nicht, ich glaube, die letzte Zeile falsch gelaufen ...

Ich weiß, das kindliche Frage ist aber thx viel!

+0

sollte es nicht #!/Bin/sh sein? – Protostome

Antwort

0

Sie brauchen das "sh" hier nicht. Einfach "Programm" auf die letzte Zeile setzen.

+0

es sagt mir: "Programm: nicht gefunden" –

+0

Ah, Programm ist nicht in Ihrem $ PATH. ./program funktioniert. – Toucan

+0

ok, gibt es eine Möglichkeit, es über Skript auszuführen, ohne es auf PATH zu setzen? –

11

Wenn ./program in der Shell funktioniert, warum nicht in Ihrem Skript verwenden?

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 

sh program startet sh zu versuchen und program als ein Shell-Skript zu interpretieren. Höchstwahrscheinlich ist es kein Skript, sondern eine andere ausführbare Datei, weshalb es fehlschlägt.

2

Sie brauchen nicht die sh und sieht aus, als ob Sie nicht den Pfad zum Programm in Ihrem $PATH haben.

Try this:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 
+0

Es wäre besser, wenn die Verwendung von "sh" erklärt würde. Warum funktioniert es nicht mit 'sh'? – Arafangion

1

Dies sollte genug sein:

/home/user/path_to_the_program/program 

Wenn das nicht funktioniert, prüfen Sie folgende:

  • ausführbaren Bit
  • shebang Linie das Programm (wenn es ein Skript ist)
+0

Die Angabe des Pfads funktioniert möglicherweise nicht, wenn das Programm von relativen Pfaden des aktuellen Verzeichnisses abhängig ist. Zum Beispiel könnte das Programm von Eingabedateien abhängen, die sich im selben Verzeichnis wie das Programm befinden. –

+0

In diesem Fall haben Sie Recht. –

+0

Unabhängig davon, wie dies gemacht wird, muss der vollständige Pfad von/irgendwo/kommen - wenn nicht auf dem Pfad, dann über die Shebang-Zeile, wenn nicht dort, dann muss er explizit mit irgendwelchen Mitteln gesetzt werden. – Arafangion

3

Wenn Sie

./program 

Die Schale geben versucht, das Programm auszuführen, je nachdem wie es bestimmt die Datei ausgeführt werden muss. Wenn es sich um eine Binärdatei handelt, wird versucht, die Eingabeunterroutine auszuführen. Wenn die Shell detektiert ist es ein Skript, zB durch die Verwendung von

#!/bin/sh 

oder

#!/bin/awk 

oder allgemeiner

#!/path/to/interpreter 

die Shell die Datei übergeben werden (und alle bereitgestellten Argumente) als Argumente für den angegebenen Interpreter, der dann das Skript ausführt. Wenn der im Pfad angegebene Interpreter nicht existiert, wird die Shell fehlerhaft sein, und wenn keine Interpreterzeile gefunden wird, nimmt die Shell an, dass das angegebene Skript von selbst ausgeführt wird.

./program 

Ein Befehl

sh program 

zu

äquivalent ist, wenn die erste Zeile des Programms enthält

#!/bin/sh 

unter der Annahme, dass/bin/sh das SH im Pfad ist (es könnte zum Beispiel/system/bin/sh sein). Wenn Sie eine Binärdatei an sh übergeben, wird sh als Shell-Skript behandelt, was nicht der Fall ist, und binary ist keine interpretierbare Shell (was einfacher Text ist). Aus diesem Grund können Sie in diesem Zusammenhang nicht

verwenden. Es wird auch fehlschlagen, weil das Programm ruby, awk, sed oder irgendetwas anderes ist, das kein Shell-Skript ist.

Verwandte Themen