如何忽略mv错误?

Sam*_*Sam 31 makefile

我正在创建一个Makefile,将输出文件(foo.o)移动到另一个目录(baz).

输出文件根据需要移动到目录.但是,如果我make再次输入make,则不会重新编译输出文件,mv当它尝试将不存在的空文件移动到目录时会出错baz.

这就是我make all在所有编译后在规则中定义的内容:

-test -e "foo.o" || mv -f foo.o ../baz
Run Code Online (Sandbox Code Playgroud)

不幸的是,我仍然遇到错误.

alt*_*dky 103

食谱中的错误(来自TFM)

要忽略配方行中的错误-,请在行的文本的开头(在初始选项卡之后)写入a .

所以目标将是这样的:

moveit:
    -mv foo.o ../baz
Run Code Online (Sandbox Code Playgroud)


Rio*_*iot 31

我注意到没有人真正回答过原来的问题本身,特别是如何忽略错误(目前所有答案都只关注调用命令,如果它不会导致错误).

要实际忽略错误,您只需执行以下操作:

mv -f foo.o ../baz 2>/dev/null; true
Run Code Online (Sandbox Code Playgroud)

这将把stderr输出重定向到null,并遵循命令true(它总是返回0,导致make相信命令成功而不管实际发生了什么),允许程序流继续.

  • 这个不错.当然有人也可以删除"真实"部分并使用" - ",如果他们想看到有关丢失文件的一些输出. (3认同)

Cha*_*les 10

+@[ -d $(dir $@) ] || mkdir -p $(dir $@)
Run Code Online (Sandbox Code Playgroud)

是我用来静默创建一个文件夹,如果它不存在.对于你的问题,这样的事情应该有效

-@[ -e "foo.o" ] && mv -f foo.o ../baz
Run Code Online (Sandbox Code Playgroud)