我为赋值写了一个程序,它应该将输出输出到stdout。赋值规范要求创建一个Makefile,当作为make run > outputFile调用时,它应该运行程序并将输出写入一个文件,该文件具有与规范中给出的相同的SHA1指纹。

我的问题是我的makefile:

...
run:
     java myprogram

还将运行我的程序(例如Java myprogram)的命令打印到输出文件中,因此我的文件包含了导致指纹错误的额外行。

是否有任何方法可以在不向命令行回显命令调用的情况下执行命令?


在命令的开头添加@,告诉gmake不要打印正在执行的命令。是这样的:

run:
     @java myprogram

正如Oli所建议的,这是Make的特性,而不是Bash的特性。

另一方面,Bash永远不会回显正在执行的命令,除非你明确地告诉它这样做(即使用-x选项)。


在命令前面加@的效果可以通过在命令行上使用后面的反斜杠扩展到一个节。如果希望使用.PHONY命令来抑制输出,可以使用以下命令开始该节:

@printf "..."

更简单的是,使用make -s(静默模式)!


你也可以使用。silent

.SILENT: run
hi:
     echo "Hola!"
run:
     java myprogram

在这种情况下,make hi将输出命令,但make run将不输出。