我正在写一个简短的shell脚本,它调用'make all'。这并不重要,但是如果情况确实如此,我是否可以抑制这样一个信息,即“无所适从”。我希望找到一个能够抑制这个(不确定是否存在)的标志,但是额外的一行或两行代码也可以工作。抑制“没有什么可为'所有'”
仅供参考我正在使用bash。
编辑:更清楚一点,我只想记住那些无关紧要的信息。否则,我想显示输出。
我正在写一个简短的shell脚本,它调用'make all'。这并不重要,但是如果情况确实如此,我是否可以抑制这样一个信息,即“无所适从”。我希望找到一个能够抑制这个(不确定是否存在)的标志,但是额外的一行或两行代码也可以工作。抑制“没有什么可为'所有'”
仅供参考我正在使用bash。
编辑:更清楚一点,我只想记住那些无关紧要的信息。否则,我想显示输出。
你可以将“所有”假目标(如果没有的话)具有真正的目标为前提,做了不显眼的:
.PHONY: all
all: realTarget
@echo > /dev/null
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。
真的有必要吗?与仅仅执行grep -v有什么不同? – sas4740 2010-08-05 23:31:55
首先,无论如何,我的信息会发送到stderr,所以至少您必须重定向stderr for grep才能产生任何效果。接下来,您希望make的其余输出保持不变,所以我不想将stderr与stdout混合。最后,这也是我的学习练习。 – 2010-08-06 15:38:04
我想提高上一解决方案,这只是为了多一点效率... :)
.PHONY: all
all: realTarget
@true
而不是回声,你可能只是做@:对于一个没有操作 – 2010-08-07 15:58:07
@William Pursell:通过golly,你是对的。我从来不知道':'是一个没有操作的外壳......或者我曾经用过这种东西。 – Beta 2010-08-07 17:14:07
我喜欢这种偷偷摸摸的方法。警告消失了,因为现在“全部”有些事情要做,但它所做的却是什么都没有。 “echo”的另一个选项是使动作变为“@真实”,该动作不应该打印任何内容,并且会默默成功。 – RBerteig 2010-08-13 09:25:04