0

我有一个 C++ 程序,它在 linux 终端中运行的命令是:

./executable file input.txt parameter output.txt

我想为它制作一个 bash 脚本,但我做不到。我试过这个:

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

但这是不对的,因为它没有输入,也没有数字参数。提前致谢。

4

1 回答 1

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

因此,例如使用参数“myprogram.cpp input.txt parameter output.txt”运行脚本“doit”,我们看到:

% 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
于 2013-03-21T20:47:47.863 回答