2014-09-24 2 views
-5

Я хочу выполнить скрипт из моих кодов на C++, для которого требуется аргумент. этот аргумент является контекстом txt-файла, который мне нужен для кота, чтобы предоставить аргумент. как я могу назвать этот скрипт в C++ аргументом?, используя обратные кавычки в сценарии C++ для exec bash

вот мой код: my_script.sh нужен аргумент, я хочу получить значение этого аргумента, указав my_file.txt. мой вопрос может cat /tmp/my_file.txt интерпретироваться из C++ ??

const char * my_array[] = { 

"/dir/my_script.sh `cat /tmp/my_file.txt` " 
    . 
    . 
    . 
}; 
+0

Что такое библиотека вы используете для вызова Баш скрипт ? – IdeaHat

+0

Проверить http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c – Scony

+0

@Scony зависит, если он/она использует c ' системный вызов. – IdeaHat

ответ

0

Я никогда не слышал о обратных кавычек в строках C++ или массивах символов для вызова произвольного кода.

Вы уверены, что не хотите system() function?

+0

'system()' не сможет вернуть результат выполненной команды вызывающему. Я думаю, что OP скорее всего должен оттолкнуть эту идею с backticks, и использовать трубу для выполнения команды, которую они хотят. –

+0

Нет, но вы можете перенаправить вывод и проверить файл (ы). Это то, что я делаю регулярно с perl, так почему бы не сделать это с C++? * BUT * команда «foo 1> foo.out 2> foo.err» не совсем переносима ... – Yamakuzure

1

В обратных кавычках, или любая другая конструкция и интерпретатор (bash) при чтении линии, и он затем выполняет команду после преобразования параметров. Когда вы выполняете команду, вы начинаете ее с ее параметров или можете использовать system или конструкцию bash -c для анализа параметров, но это преобразование не происходит.

Я настоятельно рекомендую вам использовать сценарий оболочки, который принимает имя файла как параметр, и вызывает любую команду, которую вы хотите использовать backquotes или $(), потому что скрипт выполняется оболочкой, а оболочка знает, что делать с backquotes и $().

Вы могли бы промежуточный сценарий, скажем /path/to/laucher, содержащий

#! /bin/bash 

/dir/my_script.sh `cat $1` 

и в вашем коде на Си ++, вам просто позвонить:

system("/path/to/launcher /tmp/my_file.txt"); 
+1

'system()' не сможет вернуть результат выполненной команды вызывающему. Я думаю, что OP скорее всего должен оттолкнуть эту идею с backticks, и использовать трубу для выполнения команды, которую они хотят. –

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