我正在尝试编写一个 bash 脚本,使用一个命令一次性构建并运行一个 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
它卡在最后一行,然后什么也不做。有人能帮我吗?
答案1
这应该足够了:
#!/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
。