2010-10-17 11 views
7

Voglio eseguire un programma tramite script. normalmente inserisco ./program nella shell e il programma si avvia.Linux: Esegui un binario in uno script

il mio script è simile al seguente:

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

fallisce, credo che l'ultima riga è andato storto ...

So che questa è questione infantile ma thx molto!

+0

non dovrebbe essere #!/Bin/sh? – Protostome

risposta

0

Non è necessario il "sh" qui. Basta mettere "programma" sull'ultima riga da solo.

+0

mi dice: "programma: non trovato" –

+0

Ah, il programma non è nel tuo $ PATH. ./program funzionerà. – Toucan

+0

ok, c'è un modo per eseguirlo tramite script senza metterlo in PATH? –

11

Se ./program funziona nella shell, perché non utilizzarlo nella sceneggiatura?

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

sh program lancia sh per cercare e interpretare program come uno script di shell. Molto probabilmente non è uno script ma un altro file eseguibile, motivo per cui non funziona.

2

Non è necessario il sh e sembra che non si abbia il percorso per il programma nel proprio $PATH.

Prova questo:

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

Sarebbe meglio se fosse spiegato l'uso di "sh". Perché non funziona con 'sh'? – Arafangion

1

Questo dovrebbe essere sufficiente:

/home/user/path_to_the_program/program 

Se questo non funziona, verificare quanto segue:

  • bit eseguibile linea
  • shebang di il programma (se è una sceneggiatura)
+0

L'assegnazione del percorso potrebbe non funzionare se il programma dipende da percorsi relativi dalla sua directory corrente. Ad esempio, il programma potrebbe dipendere da file di input che si trovano nella stessa directory del programma. –

+0

In tal caso, hai ragione. –

+0

Indipendentemente da come viene fatto, il percorso completo deve provenire da/da qualche parte/- se non sul percorso, quindi tramite la linea shebang, se non c'è, allora deve essere impostato in modo esplicito tramite alcuni mezzi. – Arafangion

3

Quando si digita

./program 

La shell tenta di eseguire il programma in base al modo in cui determina il file deve essere eseguito. Se è un binario, tenterà di eseguire la subroutine di ingresso. Se il guscio rileva è uno script, ad esempio attraverso l'uso di

#!/bin/sh 

o

#!/bin/awk 

o più in generale

#!/path/to/interpreter 

guscio passerà il file (ed eventuali argomenti specificati) come argomenti all'interprete fornito, che eseguirà quindi lo script. Se l'interprete indicato nel percorso non esiste, la shell eseguirà un errore e, se non viene trovata alcuna riga dell'interprete, la shell assumerà che lo script fornito deve essere eseguito da solo.

Un comando

sh program 

è equivalente a

./program 

quando la prima riga del programma contiene

#!/bin/sh 

supponendo che/bin/sh è la sh nel percorso (potrebbe essere/system/bin/sh, ad esempio). Passare un binario a sh causerà a sh di considerarlo come uno script di shell, che non lo è, e il binario non è una shell interpretabile (che è testo normale). Questo è il motivo per cui non è possibile utilizzare

sh program 

in questo contesto. Fallirà anche perché il programma è ruby, awk, sed, o qualsiasi altra cosa che non sia uno script di shell.