Crear un script bash para compilar y ejecutar un programa C++

Crear un script bash para compilar y ejecutar un programa C++

Estoy intentando crear un script bash para compilar y ejecutar un programa C++ a la vez con un comando, normalmente ahora tengo que hacer

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

Quiero poder hacer, decir

brun file.cc < input.in

¿Cómo puedo hacer esto? Ahora mismo tengo algo que se puede ejecutar como

brun file.cc '< input.in'

Aquí está mi guión actual.

#!/bin/bash

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

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

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

Que se atasca en la última línea y luego no hace nada. ¿Puede alguien ayudarme aquí?

Respuesta1

Esto debería ser suficiente:

#!/bin/bash

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

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

./$OBJFILE

Y deberías poder llamarlo así:

brun file.cc < input.in

Esto funciona porque la entrada redirigida a STDIN del brunscript simplemente se almacena en el búfer, y esa entrada almacenada en el búfer está disponible para cualquier subproceso que la lea primero; en este caso, el ejecutable recién creado.


También podrías considerar usarlo makepara automatizar tu compilación. makees lo suficientemente inteligente como para realizar su compilación a partir de reglas predeterminadas sin la necesidad de un archivo MAKE explícito. Entonces su script de compilación/ejecución podría ser tan simple como:

#!/bin/bash

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

Aquí &&se garantiza que OBJFILE solo se ejecute si no se encontraron errores de compilación make.

información relacionada