【问题标题】:Compiling my source code (C) using a shellscript [duplicate]使用 shellscript 编译我的源代码 (C) [重复]
【发布时间】:2020-01-17 00:41:49
【问题描述】:

我想制作一个可以编译和运行(如果它编译)我创建的 C 程序的 shell 脚本。但是,如果它不编译,我不希望它运行可执行文件。到目前为止,我已经创建了这个作为我的解决方案;

gcc -o assignment1 assignment1.c if [[ ?$ -eq 0 ]];然后 ./assignment1;菲 0号出口;

但是,它一直说第 2 行语法错误:文件意外结束。我是 bash 的新手,有人可以解释为什么这不起作用

修复了语法错误并关闭了 if 语句。感谢评论者。

【问题讨论】:

  • 你有几个语法错误;使用shellcheck.net检查您的代码。
  • 你应该学会使用makefile而不是编写自定义脚本。
  • +1 用于使用 Makefiles - 它们是专门为此目的而构建的。这是一个快速介绍:gnu.org/software/make/manual/html_node/Introduction.html
  • if gcc -o assignment1 assignment1.c; then ./assignment1; fi -- 根本没有理由使用$?[[

标签: bash shell


【解决方案1】:

在我看来,您需要关闭 if,并在括号后添加空格:

gcc -o assignment1 assignment1.c
if [[ ?$ -eq 0 ]]; then 
./assignment1; 
fi 
exit 0;

但是,既然这相当简单,为什么不使用条件执行:

gcc -o assignment1 assingment.c && ./assignment1

这样,如果第一个子命令失败,第二个子命令就不会运行 - imo 看起来也更干净!

【讨论】:

  • if [[?$ -eq 0]] 无效。不需要 ( 。只需gcc -o assignment1 assignemt.c && ./assignement1
  • [?$ -eq 0]if [[?$ -eq 0]] 一样无效。 Shell 是空间感知的,[[$? 它将尝试执行名为 ex 的命令。 [[0 并且没有这样的命令就失败了。
  • 我的错误 - 我在空格中进行了编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2012-02-17
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多