我正在编写一个脚本来确定是否find
支持以下原色:
- 正则表达式
- 时间
- 阿泰姆
- 带有 +/- 的 inum
到目前为止,我想出了这个:
find / -mindepth 0 -maxdepth 1 -inum +0 -exec echo "ok:inum+-" \; 2>&1 | head -n 1
仅当该命令能够理解该主节点时,它才应输出“ok:inum+-”。
问题是我依赖 find 来查找匹配项,否则它不会输出任何内容。
理想情况下,测试的主程序不应关心它发现什么,并且应始终执行回显,除非工具因错误而中止。
我意识到我可以放弃-exec echo …
并检查调用的退出代码find
,但是我将如何根据它打印“ok:”字符串?
哦,任何解决方案都必须是一行每个测试的初级。
答案1
您可以检测 stderr 上是否存在任何内容:
find_supports() {
[ -z "$(find / -prune "$@" 2>&1 > /dev/null)" ]
}
然后:
if find_supports -inum +0; then...
if find_supports -exit 2; then...
if find_supports -maxdepth 1; then...
请注意,有些谓词find
支持,但它们之间的方式不兼容。
例如,默认情况下-regex
期望 BSD 中的基本正则表达式,而 GNU期望来自某些古老版本的.find
find
emacs
的解释后缀in -mtime
/-size
也因实现而异。
另外,上面的内容不能用于测试-depth
//-delete
因为-mindepth
它们与-prune
.-depth
是标准的,并且实现-maxdepth
也有-mindepth
.