2010-08-05 77 views
12

我正在写一个简短的shell脚本,它调用'make all'。这并不重要,但是如果情况确实如此,我是否可以抑制这样一个信息,即“无所适从”。我希望找到一个能够抑制这个(不确定是否存在)的标志,但是额外的一行或两行代码也可以工作。抑制“没有什么可为'所有'”

仅供参考我正在使用bash。

编辑:更清楚一点,我只想记住那些无关紧要的信息。否则,我想显示输出。

回答

13

你可以将“所有”假目标(如果没有的话)具有真正的目标为前提,做了不显眼的:

.PHONY: all 

all: realTarget 
    @echo > /dev/null 
+10

而不是回声,你可能只是做@:对于一个没有操作 – 2010-08-07 15:58:07

+0

@William Pursell:通过golly,你是对的。我从来不知道':'是一个没有操作的外壳......或者我曾经用过这种东西。 – Beta 2010-08-07 17:14:07

+1

我喜欢这种偷偷摸摸的方法。警告消失了,因为现在“全部”有些事情要做,但它所做的却是什么都没有。 “echo”的另一个选项是使动作变为“@真实”,该动作不应该打印任何内容,并且会默默成功。 – RBerteig 2010-08-13 09:25:04

1

标志-s的沉默令:make -s all

编辑:我最初回答旗-q沉默化妆。它适用于我,尽管手册页指定-s, --silent, --quiet作为有效标志。

+0

W¯¯坦尼,对我来说这是'-s','--silent'或'--quiet' – Anders 2010-08-05 17:38:31

+1

我本来应该更清晰。我只想压制文件最新的情况。否则,我想显示输出。 – sas4740 2010-08-05 17:39:21

+0

我看到有人回答并建议'make all | grep -v“没什么可做的”,但似乎他们删除了这个答案。 – 2010-08-05 19:00:27

0

grep的解决方案:

{ make all 2>&1 1>&3 | grep -v 'No rule to make target `all' >&2; } 3>&1 

2>&1 1>&3发送化妆的stdout金融衍生工具3,使的标准错误到标准输出的结构。然后,grep从前一个命令的stdout中读取数据,删除有问题的行并将stdout发送到stderr。最后,fd 3返回到stdout。

+0

真的有必要吗?与仅仅执行grep -v有什么不同? – sas4740 2010-08-05 23:31:55

+1

首先,无论如何,我的信息会发送到stderr,所以至少您必须重定向stderr for grep才能产生任何效果。接下来,您希望make的其余输出保持不变,所以我不想将stderr与stdout混合。最后,这也是我的学习练习。 – 2010-08-06 15:38:04

6

我想提高上一解决方案,这只是为了多一点效率... :)

.PHONY: all 
all: realTarget 
     @true 
相关问题