Criando um script bash para construir e executar um programa C++

Criando um script bash para construir e executar um programa C++

Estou tentando fazer um script bash para construir e executar um programa C++ de uma só vez com um comando, normalmente agora eu tenho que fazer

g++ file.cc -o file
./file < input.in

Eu quero ser capaz de fazer, digamos

brun file.cc < input.in

Como posso fazer isso? No momento eu tenho algo que pode ser executado como

brun file.cc '< input.in'

Aqui está meu script atual

#!/bin/bash

CFILE=$1
OBJFILE="${CFILE%.*}"

g++ $CFILE -o $OBJFILE
echo  "Built file: $CFILE -> $OBJFILE"
chmod +x $OBJFILE

ARGS="${@##*.cc}"
./$OBJFILE""$ARGS

Que fica preso na última linha, mas não faz nada. Alguém pode me ajudar aqui?

Responder1

Isto deve ser suficiente:

#!/bin/bash

CFILE=$1
OBJFILE="${CFILE%.*}"

g++ $CFILE -o $OBJFILE
echo  "Built file: $CFILE -> $OBJFILE"

./$OBJFILE

E você deve poder chamá-lo assim:

brun file.cc < input.in

Isso funciona porque a entrada redirecionada para STDIN do brunscript é simplesmente armazenada em buffer e essa entrada armazenada em buffer fica disponível para qualquer subprocesso que a leia primeiro - neste caso, seu executável recém-criado.


Você também pode considerar usar makepara automatizar sua construção. makeé inteligente o suficiente para fazer sua construção a partir de regras padrão sem a necessidade de um makefile explícito. Portanto, seu script de construção/execução pode ser tão simples quanto:

#!/bin/bash

OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE

O &&aqui garante que OBJFILE só será executado se nenhum erro de compilação for encontrado pelo make.

informação relacionada