2013-03-21 2 views
0

У меня есть программа C++ и его команду для запуска в Linux терминала:Как мне создать скрипт bash для запуска программы на C++?

./executable file input.txt parameter output.txt 

Я хочу сделать Баш скрипт для этого, но я не могу. Я пробовал этот:

#!/bin/bash 
file_name=$(echo $1|sed 's/\(.*\)\.cpp/\1/') 
g++ -o $file_name.out $1 
if [[ $? -eq 0 ]]; then 
    ./$file_name.out 
fi 

но это неправильно, потому что он не получает входных данных, а также числовой параметр. Заранее спасибо.

ответ

2

Этот сценарий предполагает, что первым аргументом является имя исходного файла и его файл .cpp. Обработка ошибок устранена для краткости.

#!/bin/bash 
#set -x 
CC=g++ 
CFLAGS=-O 
input_file=$1 
shift # pull off first arg 
args="$*" 
filename=${input_file%%.cpp} 

$CC -o $filename.out $CFLAGS $input_file 
rc=$? 

if [[ $rc -eq 0 ]]; then 
    ./$filename.out $args 
    exit $? 
fi 

exit $rc 

Так, например, работает сценарий «Doit» с аргументами «myprogram.cpp input.txt параметра output.txt» мы видим:

% bash -x ./doit myprogram.cpp input.txt parameter output.txt 
+ set -x 
+ CC=g++ 
+ CFLAGS=-O 
+ input_file=myprogram.cpp 
+ shift 
+ args='input.txt parameter output.txt' 
+ filename=myprogram 
+ g++ -o myprogram.out -O myprogram.cpp 
+ rc=0 
+ [[ 0 -eq 0 ]] 
+ ./myprogram.out input.txt parameter output.txt 
+ exit 0 
+0

и в какой части вашего сценария я должен изменить для моего EXE-файла, ввода и числового параметра? Извините, я очень новичок в bash-скриптах. – MTT

+0

Вам не нужно изменять скрипт - он должен работать так, как если бы я правильно понял ваш случай использования. Или у вас есть другие ожидания? Если да, пожалуйста, измените свой вопрос, уточнив, что именно вы хотите сделать сценарию. – TheDuke

+0

Большое спасибо. Единственное, что, поскольку у меня есть make-файл, у меня есть exe-файл вместо cpp. Это означает, что моя команда для запуска кода в терминале: ./myprogram.exe параметр input.txt output.txt. – MTT

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