2010-10-17 27 views
7

quiero ejecutar un programa a través de un script. normalmente escribo ./program en el shell y el programa comienza.Linux: ejecutar un archivo binario en un script

mi guión es el siguiente:

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

falla, creo que la última línea que salió mal ...

Sé que esto es pregunta infantil, pero THX mucho!

+0

¿No debería ser #!/Bin/sh? – Protostome

Respuesta

0

No necesita el "sh" aquí. Simplemente ponga "programa" en la última línea por sí mismo.

+0

me dice: "programa: no encontrado" –

+0

Ah, el programa no está en su $ PATH. ./program funcionará. – Toucan

+0

bien, ¿hay alguna manera de ejecutarlo mediante script sin ponerlo en PATH? –

11

Si ./program funciona en el shell, ¿por qué no utilizarlo en el script?

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

sh program lanza sh para tratar e interpretar program como script de shell. Lo más probable es que no sea un script, sino algún otro archivo ejecutable, por lo que falla.

2

No necesita el sh y parece que no tiene la ruta del programa en su $PATH.

Prueba esto:

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

Sería mejor si se explicara el uso de 'sh'. ¿Por qué no funciona con 'sh'? – Arafangion

1

Esto debería ser suficiente:

/home/user/path_to_the_program/program 

Si eso no funciona, compruebe lo siguiente:

  • bit de ejecución de línea
  • tinglado de el programa (si es un script)
+0

Dar la ruta puede no funcionar si el programa depende de rutas relativas de su directorio actual. Por ejemplo, el programa puede depender de archivos de entrada que están en el mismo directorio que el programa. –

+0

En ese caso, tienes razón. –

+0

Independientemente de cómo se hace esto, la ruta completa tiene que venir de/somewhere/- si no está en la ruta, luego a través de la línea shebang, si no está allí, entonces debe establecerse explícitamente por algún medio. – Arafangion

3

Al escribir

./program 

La cáscara trata de ejecutar el programa de acuerdo a cómo se determina el archivo necesita ser ejecutado. Si es un archivo binario, intentará ejecutar la subrutina de entrada. Si la cáscara detecta que es una secuencia de comandos, por ejemplo a través del uso de

#!/bin/sh 

o

#!/bin/awk 

o más generalmente

#!/path/to/interpreter 

la cáscara pasará el archivo (y cualquier argumentos proporcionados) como argumentos para el intérprete proporcionado, que luego ejecutará el script. Si el intérprete dado en el camino no existe, el intérprete de comandos tendrá un error, y si no se encuentra una línea de intérprete, el intérprete asumirá que el guión suministrado se ejecutará solo.

Un comando

sh program 

es equivalente a

./program 

cuando la primera línea de programa contiene

#!/bin/sh 

suponiendo que/bin/sh es la sh en su camino (podría ser/system/bin/sh, por ejemplo). Pasar un binario a sh hará que sh lo trate como un script de shell, que no lo es, y binary no es un shell interpretable (que es texto plano). Es por eso que no puede usar

sh program 

en este contexto. También fallará debido a que el programa es ruby, awk, sed o cualquier otra cosa que no sea un script de shell.

Cuestiones relacionadas