2016-12-06 4 views
0

У меня есть сценарий оболочки в C, который определяется какИспользование переменных для сценария оболочки в C

#define SHELLSCRIPT "\ 
sed 's/./& \ 
inserted text \ 
    /20' fileA.txt > fileB.txt \ 
" 

Когда этот сценарий оболочки выполняется на терминале, он вставляет текст inserted text в fileB.txt со смещением 20. Теперь, я хочу, чтобы 20fileA.txt и fileB.txt были выбраны из переменной.

Как мне это сделать? Я попытался следующие

#define SHELLSCRIPT "\ 
    sed 's/./& \ 
    inserted text \ 
     /$i' fileA.txt > fileB.txt \ 
    " 

и в C перед запуском выше скрипт, я бегу system("i=20");, но затем я получаю эту ошибку ниже

sed: 1: "s/./& this comment has ...": bad flag in substitute command: '$'

Как я могу добиться этого?

+0

Не ясно. Если вы хотите иметь переменные поля, вы должны составить строку в своем коде. Как вы получаете идею 'sed' или оболочка вообще имеет доступ к внутреннему состоянию вашей программы? – Olaf

ответ

2

При запуске system() он запускает новую оболочку каждый раз. Таким образом, оболочка, которая i=20 работает в не то же самое, что оболочка sed команда выполняется в.

Вместо $i в тексте сценария, положить %d там вместо этого. Затем вы можете использовать его как строку формата для sprintf, которая может форматировать команду в отдельную переменную.

#define SHELLSCRIPT "\ 
    sed 's/./& \ 
    inserted text \ 
     /%d' fileA.txt > fileB.txt \ 
    " 

char command[500]; 
sprintf(command, SHELLSCRIPT, 20); 
system(command); 
+1

вы избили меня на 30 секунд :) –

+0

Какова важность команды здесь? – prabodhprakash

+0

@prabodhprakash Вот где помещается результат форматированной строки. Затем вы можете передать это 'system'. – dbush

1

как о замене вашей команды сценария

#define SHELLSCRIPT "\ 
    sed 's/./& \ 
    inserted text \ 
     /%d' %s > %s \ 
    " 

, а затем заменить ваши переменные, перед выполнением команды:

char cmd[100 +1]; 
sprintf(cmd, SHELLSCRIPT , 20, "file1", "file2"); 
system(cmd) 
+1

Спасибо за помощь. Я бы назвал это правильным, если бы это был первый ответ. Поддерживается поддержка поддержки. – prabodhprakash

+0

приветствую вас, я рад, что вы нашли свой ответ :) –

Смежные вопросы