2010-05-05 2 views
2

У меня есть сценарий оболочки C, который вызывает две программы C - один после другого с обработкой какой-либо файл перед тем, в промежутке между и после него.Как связать код C/C++ с C-shell-скриптом?

Теперь, как таковой у меня есть три файла - один C shell script и 2 .c file с.

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

Есть ли лучший способ сделать это?

[Я знаю, что я могу сделать один код кода C из этих двух ... но я все равно останусь с скриптом оболочки и кодом C. На самом деле, два кода C делают совершенно разные вещи ... поэтому я хочу, чтобы они были отдельными]

+0

Возможно, вы захотите использовать sh/bash вместо csh. Я использую tcsh как свою интерактивную оболочку, но bash намного лучше для сценариев. – KeithB

ответ

3

Похоже, вы обеспокоены тем, что ваши пользователи не достаточно усердны, чтобы выяснить, как решить такие проблемы, как ошибки command not found и т. П. Если абсолютно ДОЛЖНО скрывать «сложность» коллекции файлов, вы могли бы создать свой скрипт для других файлов. В большинстве других случаев я бы предположил, что этот подход только увеличит вашу рабочую нагрузку на поддержку, так как полу опытные пользователи с меньшей вероятностью узнают, как устранить этот процесс.

Если вы решили полагаться на присутствие компилятора в системе, на которой вы работаете, вы можете сохранить код C в виде коллекции команд cat $STRING >> file.c для создания двух файлов C, которые вы затем компилируете и используете.

Если вы хотите использовать предварительно скомпилированные программы, вместо этого можно использовать один и тот же базовый процесс, за исключением того, что вместо этого используйте xxd, чтобы сгенерировать строки в вашем скрипте и отменить процесс преобразования, чтобы дать вам рабочие двоичные файлы. Примечание. Не забудьте указать chmod двоичный файл, чтобы он был выполнен.

+0

@torak: спасибо! – Lazer

0

Использовать zip-файл или tar-файл? И вы понимаете, что файлы .c не исполняются, вам нужно сначала скомпилировать &?

+0

По умолчанию zip или tar-файл не является исполняемым, поэтому вы запрашиваете у пользователей извлечения перед запуском – DVK

+0

@Keith Randall: команды компиляции и компоновки находятся в скрипте оболочки. – Lazer

1

использовать команду shar для создания самораспаковывающегося архива.

или еще лучше использовать unzipsfx с опцией AUTORUN.

Это обеспечивает пользователей ОДНОМ файлом и только одну команду для выполнения (в отличие от одной для разворота и одну для выполнения).

ПРИМЕЧАНИЕ. Команда unzip для запуска должна использовать параметр «-n», таким образом, только первый запуск будет извлекать файлы, а последующие будут пропускать извлечение.

+0

Почему «или еще лучше использовать unzipsfx»? Добавляя файл unzip в архив, его гораздо менее независимая от платформы платформа. –

+0

@jcordasc - shar AFAIK не разрешает автозапуск (например, автоматически запускайте скрипт по unarchival) – DVK

0

Вы можете включать С код внутри сценария оболочки как here document:

#!/bin/bash 

cat > code.c << EOF 
line #1 
line #2 
... 
EOF 

# compile 
# execute 

Если вы хотите получить фантазии, вы можете проверить на наличие исполняемого файла и пропустить их компиляции, если они есть.

Если вы занимаетесь программированием большого количества программ, то остальную часть Advanced Bash-Scripting Guide стоит посмотреть также.