我正在使用 Mac OS X。我正在尝试使用 cp 命令复制一些文件以用于这样的构建脚本。
cp ./src/*/*.h ./aaa
但是如果 ./src 目录中没有 .h 文件,此命令会引发错误。如何使命令不引发错误?(静默失败)错误导致构建结果失败,但我只想在只有一些头文件时进行复制。
答案1
如果您正在谈论错误消息,您可以通过将其发送到位桶来抑制它:
cp ./src/*/*.h ./aaa 2>/dev/null
如果您想隐藏退出代码和错误消息:
cp ./src/*/*.h ./aaa 2>/dev/null || :
答案2
你正在寻找类似的东西
if [ -e file ]
then cp file /somewhere
fi
(不幸的是,该-f
选项不是您要找的机器人。)
如果你想匹配一个 glob,这是行不通的;find
而是使用,例如:
find ./src -name \*.h -exec cp {} ./destination \;
答案3
将结果传递给 true 可确保命令始终成功。我在 Linux 上尝试过此操作,但在任何 Mac OS 上都没有尝试过:
cp ./src/*/*.h ./aaa | true
答案4
你可以强制正确的错误状态。使用一个函数:
$ cpalways () { cp $1 $2 2>/dev/null ; return 0 ; }
鉴于以下情况:
$ ls foo bar baz
ls: baz: No such file or directory
bar foo
常规复制将返回错误。它将返回退出状态 1。
$ cp baz bar ; echo $?
cp: baz: No such file or directory
1
如果我们使用上面的 cpalways() 函数,任何错误都会被隐藏:
$ cpalways baz bar ; echo $?
0
$ cpalways foo bar ; echo $?
0
$ cpalways baz bar ; echo $?
0