код скрипта bash внутри программы на C - PullRequest
0 голосов
/ 01 апреля 2011

Моя проблема заключается в следующем: у меня есть скрипт bash:

#!/bin/bash

 IFSBAK=$IFS
 if [ "$TXTEXT" = "" ]; 
 then
   CMD="find . -iname \"*.txt\" -or -iname \"*.text\""
 else
CMDTEMP="find . "
IFS=":"
for i in $TXTEXT
do
    CMDTEMP="${CMDTEMP} -iname \"*.${i}\" -or"
done
IFS=$IFSBAK
CMD=${CMDTEMP%-or}
 fi

 FILES=$(eval $CMD)
 OUTPUT=$1

 for f in $FILES
 do
VAR=$(grep -ae [a-zA-Z0-9] "$f" | tr -cs "[:alnum:]" "\n")
IFS=$' \n\t-?=!*][.\",();\'\`\´:'   
for v in $VAR
do
    echo $v >> "${OUTPUT}"
done
IFS=$' \n\t'
 done

и мне нужно вставить этот код в программу на Си. Я пытался переписать весь сценарий в одну строку, тестируя его непосредственно с оболочкой, и он работает, но у меня возникают проблемы с кавычками и я не могу использовать его в качестве параметра вызова system (). Можете ли вы предложить мне выход?

Спасибо за вашу помощь

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011

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

  1. Включить содержимое скрипта в один литерал
  2. Во время выполнения программы выведите содержимое литерала во временный файл. Возможно, вам нужна стратегия, чтобы придумать уникальное имя файла.
  3. Вызвать временный скрипт через system() call
  4. Удалить временный файл

Однако рассмотрите это как последнее средство.

3 голосов
/ 01 апреля 2011

Поместите его в сценарий оболочки и вызовите сценарий оболочки из вашего C-кода.Гораздо проще поддерживать ИМХО.

0 голосов
/ 03 марта 2015
#define SHELLSCRIPT "
...
write your shell script code here
...
"



   int main()
    {

        system(SHELLSCRIPT);
        return 0;
        //put the bash to C program 
    }
...