このスクリプトは、最初の引数がソース ファイル名であり、それが .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 parameter 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