2010-10-17 26 views
7

Je veux exécuter un programme via un script. normalement je tape ./program dans le shell et le programme commence.Linux: Exécuter un binaire dans un script

mon script ressemble à ceci:

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

échoue, je pense que la dernière ligne a mal tourné ...

Je sais que c'est question enfantine mais thx beaucoup!

+0

ne devrait-il pas être #!/Bin/sh? – Protostome

Répondre

0

Vous n'avez pas besoin du "sh" ici. Il suffit de mettre "programme" sur la dernière ligne par lui-même.

+0

il me dit: "programme: non trouvé" –

+0

Ah, le programme n'est pas dans votre $ PATH. ./programme fonctionnera. – Toucan

+0

ok, existe-t-il un moyen de l'exécuter via un script sans le mettre à PATH? –

11

Si ./program fonctionne dans le shell, pourquoi ne pas l'utiliser dans votre script?

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

sh program lance sh pour essayer d'interpréter program comme un script shell. Très probablement ce n'est pas un script mais un autre fichier exécutable, c'est pourquoi il échoue.

2

Vous n'avez pas besoin de sh et il semble que vous n'ayez pas le chemin d'accès au programme dans votre $PATH.

Essayez ceci:

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

Il serait préférable d'expliquer l'utilisation de 'sh'. Pourquoi ça ne marche pas avec 'sh'? – Arafangion

1

Cela devrait être suffisant:

/home/user/path_to_the_program/program 

Si cela ne fonctionne pas, vérifiez les points suivants:

  • bit exécutable
  • ligne shebang de le programme (s'il s'agit d'un script)
+0

Il se peut que le chemin d'accès ne fonctionne pas si le programme dépend des chemins relatifs de son répertoire actuel. Par exemple, le programme peut dépendre des fichiers d'entrée qui se trouvent dans le même répertoire que le programme. –

+0

Dans ce cas, vous avez raison. –

+0

Indépendamment de la façon dont cela est fait, le chemin complet doit provenir de/somewhere/- sinon sur le chemin, puis via la ligne shebang, sinon, il doit être explicitement défini par un moyen quelconque. – Arafangion

3

Lorsque vous tapez

./program 

La coquille tente d'exécuter le programme en fonction de la façon dont il détermine le fichier doit être exécuté. S'il s'agit d'un binaire, il tentera d'exécuter le sous-programme d'entrée. Si le shell détecte un script, par exemple par l'utilisation de

#!/bin/sh 

ou

#!/bin/awk 

ou plus généralement

#!/path/to/interpreter 

le shell passera le fichier (et tous les arguments fournis) en tant qu'arguments à l'interpréteur fourni, qui exécutera ensuite le script. Si l'interpréteur donné dans le chemin n'existe pas, le shell commettra une erreur, et si aucune ligne d'interpréteur n'est trouvée, le shell supposera que le script fourni est exécuté par lui-même.

Une commande

sh program 

est équivalent à

./program 

lorsque la première ligne de programme contient

#!/bin/sh 

en supposant que/bin/sh est sh dans le chemin (ce pourrait être/system/bin/sh, par exemple). Passer un binaire à sh fera que sh le traitera comme un script shell, ce qui n'est pas le cas, et binary n'est pas interprétable shell (qui est du texte brut). C'est pourquoi vous ne pouvez pas utiliser

sh program 

dans ce contexte. Il échouera également en raison du programme étant ruby, awk, sed, ou toute autre chose qui n'est pas un script shell.