Как вызвать программу на C в shell script?

#shell

#оболочка

Вопрос:

У меня простой вопрос. Я хочу выполнить программу на C в сценарии оболочки. Как мне это сделать? Заранее спасибо за вашу помощь.

Комментарии:

1. Это должно быть возможно, просто поместив название программы в строку. Что вы пробовали и что получилось?

2. Этот вопрос либо слишком прост, либо слишком сложен. Пожалуйста, приведите пример того, что вы хотите сделать. Все, что происходит в сценарии оболочки, связано с вызовом программ на C.

3. Не выполнять какую-либо программу на C в сценарии оболочки было бы сложнее…

4. Стоит отметить, что вы выполняете программу на C в сценарии оболочки точно так же , как если бы вы выполняли ее самостоятельно в оболочке, в том же контексте, в котором была бы эта строка сценария оболочки (тот же каталог, та же среда и т.д.).

5. @Chris Lutz: Я не писал impossible, и в любом случае exit, являясь частью самой оболочки, скорее всего, написан на C.

Ответ №1:

Предполагая, что мы говорим о linux / unix:

 #!/bin/sh
/path/to/executable arg1 arg2
  

Ответ №2:

 cc hello_world.c #produces a.out
./a.out #run your program
  

ИМХО, ваша проблема заключается в $PATH. Ваш текущий каталог не находится в PATH, поэтому, когда вы вводите

 a.out
  

ваша оболочка отвечает:

 -bash: a.out: command not found
  

вы должны выполнить ее как

 ./a.out
  

(или добавьте «.» в свой PATH, но это не рекомендуется.)

Ответ №3:

Почти каждая программа, которую вы выполняете в сценарии командной оболочки, является программой на языке Си (но некоторые, часто многие, команды, которые вы выполняете, могут быть встроены в командную оболочку). Вы выполняете программу на языке Си таким же образом, как и любую другую программу:

  • По базовому имени: command [arg1 ...]
    • Команда должна находиться в каталоге, который ищет оболочка — другими словами, в вашем PATH.
  • По относительному имени: ./command [arg1 ...] или ../../bin/command [arg1 ...]
    • Программа должна существовать и быть исполняемой (вами)
  • По абсолютному имени: /some/directory/bin/command [arg1 ...]
    • Программа должна существовать и быть исполняемой (вами)

Одна из прелестей Unix заключается в том, что программы, которые вы создаете, будь то на C или любом другом языке, получают тот же статус, что и системные команды. Единственное отличие заключается в том, что системные команды находятся в другом месте (например, /bin или /usr/bin ), чем созданные вами команды (например, usr/local/bin or $HOME/bin ).