Linux: запустить бинарный файл в скрипте - PullRequest
9 голосов
/ 17 октября 2010

Я хочу запустить программу через скрипт.обычно я набираю ./program в оболочке, и программа запускается.

мой скрипт выглядит так:

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

он не работает, я думаю, что последняя строка пошла не так ...

Я знаю, что это детский вопрос, но очень много!

Ответы [ 5 ]

11 голосов
/ 17 октября 2010

Если ./program работает в оболочке, почему бы не использовать его в своем скрипте?

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

sh program запускает sh, чтобы попытаться интерпретировать program как скрипт оболочки. Скорее всего, это не скрипт, а какой-то другой исполняемый файл, поэтому он не работает.

3 голосов
/ 11 октября 2012

Когда вы набираете

./program

Оболочка пытается выполнить программу в соответствии с тем, как она определяет, должен ли файл выполняться.Если это двоичный файл, он попытается выполнить подпрограмму ввода.Если оболочка обнаружит, что это скрипт, например, с помощью

#!/bin/sh

или

#!/bin/awk

или, в более общем смысле,

#!/path/to/interpreter

, оболочка пройдетфайл (и любые предоставленные аргументы) в качестве аргументов для предоставленного интерпретатора, который затем выполнит скрипт.Если интерпретатор, указанный в пути, не существует, оболочка выдаст ошибку, и если строка интерпретатора не найдена, оболочка будет считать, что предоставленный сценарий должен выполняться самостоятельно.

Команда

sh program

эквивалентно

./program

, когда первая строка программы содержит

#!/bin/sh

, если предположить, что / bin / sh - это sh на вашем пути (это может быть / system/ bin / sh, например).Передача двоичного файла в sh приведет к тому, что sh будет рассматривать его как сценарий оболочки, а это не так, и двоичный файл не будет интерпретируемой оболочкой (то есть простым текстом).Вот почему вы не можете использовать

sh program

в этом контексте.Также произойдет сбой из-за того, что программа является ruby, awk, sed или чем-то еще, кроме сценария оболочки.

2 голосов
/ 17 октября 2010

Вам не нужен sh и похоже, что у вас нет пути к программе в вашем $PATH.

Попробуйте это:

#!/bin/sh
cd  /home/user/path_to_the_program/
./program
1 голос
/ 17 октября 2010

Этого должно быть достаточно:

/home/user/path_to_the_program/program

Если это не сработает, проверьте следующее:

  • исполняемый бит
  • строка shebang программы (если это скрипт)
0 голосов
/ 17 октября 2010

Тебе не нужен "ш" здесь. Просто поместите «программу» в последнюю строку.

...