Я пытаюсь сделать сценарий удара, чтобы создать и запустить программу C++ сразу с одной командой, обычно прямо сейчас я должен сделать
g++ file.cc -o file
./file < input.in
Я хочу смочь сделать, сказать
brun file.cc < input.in
Как я могу сделать это? Прямо сейчас у меня есть что-то, что может быть выполнено как
brun file.cc '< input.in'
Вот мой текущий сценарий
#!/bin/bash
CFILE=$1
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
chmod +x $OBJFILE
ARGS="${@##*.cc}"
./$OBJFILE""$ARGS
Который застревает в последней строке, она просто ничего не делает затем. Кто-либо может помочь мне здесь?
Это должно быть достаточно:
#!/bin/bash
CFILE=$1
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
./$OBJFILE
И Вам необходимо назвать его таким образом:
brun file.cc < input.in
Это работает, потому что вход перенаправил к STDIN brun
, сценарий просто буферизован, и это буферизовало вход, тогда доступно тому, какой бы ни подпроцесс читает его сначала - в этом случае Ваш недавно построенный исполняемый файл.
Вы могли бы также рассмотреть использование make
, чтобы автоматизировать Ваш строить. make
достаточно умно, чтобы сделать Ваш строить из правил по умолчанию без потребности в явном makefile. Так Ваш строить/управлять сценарий могло быть столь же простым как:
#!/bin/bash
OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE
&&
здесь гарантирует, что OBJFILE только управляют, если было, не строят ошибки, найденные make
.