Isso deve ser suficiente:
#!/bin/bash
CFILE=
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
./$OBJFILE
E você deve poder ligar assim:
brun file.cc < input.in
Isso funciona porque a entrada redirecionada para STDIN do script brun
é simplesmente armazenada em buffer, e essa entrada armazenada em buffer fica disponível para qualquer subprocesso lê-lo primeiro - neste caso, seu executável recém-construído.
Você também pode considerar usar make
para automatizar sua compilação. make
é inteligente o suficiente para fazer sua compilação a partir de regras padrão sem a necessidade de um makefile explícito. Portanto, seu script de compilação / execução pode ser tão simples quanto:
#!/bin/bash
OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE
O &&
aqui garante que o OBJFILE seja executado somente se não houver erros de compilação encontrados por make
.