Erstellen eines Bash-Skripts zum Erstellen und Ausführen eines C++-Programms

Erstellen eines Bash-Skripts zum Erstellen und Ausführen eines C++-Programms

Ich versuche, ein Bash-Skript zu erstellen, um ein C++-Programm mit einem Befehl zu erstellen und auszuführen. Normalerweise muss ich jetzt Folgendes tun:

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

Ich möchte in der Lage sein, beispielsweise

brun file.cc < input.in

Wie kann ich das machen? Im Moment habe ich etwas, das wie folgt ausgeführt werden kann

brun file.cc '< input.in'

Hier ist mein aktuelles Skript

#!/bin/bash

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

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

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

Das bleibt bei der letzten Zeile hängen und tut dann einfach nichts. Kann mir hier jemand weiterhelfen?

Antwort1

Das hier sollte genügen:

#!/bin/bash

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

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

./$OBJFILE

Und Sie sollten es folgendermaßen aufrufen können:

brun file.cc < input.in

Dies funktioniert, weil die an STDIN des brunSkripts umgeleitete Eingabe einfach gepuffert wird und diese gepufferte Eingabe dann dem Unterprozess zur Verfügung steht, der sie zuerst liest – in diesem Fall Ihre neu erstellte ausführbare Datei.


Sie können auch erwägen, makeIhren Build zu automatisieren. makeist intelligent genug, um Ihren Build nach Standardregeln auszuführen, ohne dass ein explizites Makefile erforderlich ist. Ihr Build/Run-Skript könnte also so einfach sein wie:

#!/bin/bash

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

Dadurch &&wird sichergestellt, dass OBJFILE nur ausgeführt wird, wenn keine Build-Fehler gefunden wurden make.

verwandte Informationen