#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
).