我正在编写一个bash脚本来编译和运行一个C++程序。
#!/bin/bash
PROG_NAME=$1
output=$(g++ $PROG_NAME) #redirect the error to a variable
echo $output #show the error on stdout
if [$output = ""]
then
./a.out
fi
如果程序编译失败,我不想运行a.out
文件。为此,我创建了一个变量来存储编译时的错误消息。但这种方法似乎不起作用,因为输出没有被重定向到该变量。还有其他方法吗?
编辑
这是我的剧本
#!/bin/bash
PROG_NAME=$1
g++ -Werror $PROG_NAME
if [[ $? == 0 ]]; then
./a.out
fi
5条答案
按热度按时间enyaitl31#
如果
g++
失败,它将返回一个非零返回值,可以使用Bashif
命令检查该值:一个可能更好的解决方案(IMO)是学习如何使用makefile,因为它也允许更复杂的项目。
biswetbf2#
@ akka 什卡纳塔克:在你的例子中,你没有将错误重定向到一个变量,而是将g++的标准输出存储到一个变量中。
也许最简单的方法是让
g++
指示它是否成功。这将显示所有错误,并且由于g++在出错时设置了非零退出代码,因此只有在没有错误时才执行结果文件。
a5g8bdjr3#
通常,程序在STDERR上写入 error 输出。
语句
output=$(g++ $PROG_NAME)
将仅使用 STDOUT 填充变量$output
(出错时为空)。你有不同的选择。
保持您的设计,您需要做的是将STDERR重定向到STDOUT。
pzfprimi4#
您可以使用以下命令检查此可执行文件是否存在:
脚本的开头使用此代码从文件夹中删除可执行文件。www.example.com的完整内容run.sh:
然后使用以下命令运行:
pxyaymoc5#
由于您的目标是编译程序,然后在编译成功时运行它,因此使用
g++ program.cpp && ./a.out
可能比编写脚本更容易