我写了这个.sh文件来编译任何c源文件,所以当我运行它时,它要求输入文件名,gcc编译它然后运行可执行文件a.out。
但是当.c文件中存在错误时,这不能正常工作。它还显示a.out不存在。我不希望出现此错误消息(a.out不存在),但只想打印为.c文件生成的错误消息..
这是脚本..
echo `clear`
echo enter file name
read FILE
gcc $FILE
./a.out
echo -e '\n'
答案 0 :(得分:2)
如果在shell脚本中启用abort-on-error,生活将变得更加轻松:
#!/bin/sh
set -eu # makes your program exit on error or unbound variable
# ...your code here...
答案 1 :(得分:2)
利用内置规则替代脚本,您可能希望使用make
作为手工脚本的替代方案。要编译file.c
并运行生成的可执行文件,您需要做的就是:
make file && ./file
如果您不知道,我强烈建议您查看make
实用程序,因为它会让您的工作变得更轻松。如果没有它,管理任何超过一个文件项目的东西都会变得非常糟糕。
答案 2 :(得分:1)
您可以链接编译和执行命令:
echo `clear`
echo enter file name
read FILE
gcc $FILE && ./a.out
echo -e '\n'
这里,如果gcc失败,shell将删除./a.out命令。
答案 3 :(得分:1)
您也可以使用双引号保护文件名:
#! /bin/bash
clear
echo -n "Enter file name: "
read FILE
gcc -Wall -W "$FILE" && ./a.out
echo
答案 4 :(得分:0)
我希望这是你所看到的只需要这个命令:
./ compile executableName myCProgram.c -lm
您可以将更多C文件放在彼此之前,并在行尾添加更多库,且executableName不需要.exe
#!/bin/bash
args="$@"
quant=$#
#Copies in case you need the -lm(math library) params
biblio=${args#*-}
#grabs all params except the first one which should be the name of the executable
firstCommand=${*:2:${#args}}
#Remove the "-lm -lc" from firstCommand
firstCommand=${firstCommand%%-*}
printf "\nEXECUTING: gcc -W -Wall -c $firstCommand\n"
#Creates the object file ".o"
gcc -W -Wall -c $firstCommand
#Convert the files names from example.c to example.o
args=${args//.c/.o}
printf "\nEXECUTING: gcc -o $args\n\n"
#Creates the executable
gcc -o $args
printf "\n**Now execute comand: ./$1 **\n\n"