首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一行程序中使用bash测试失败的命令

在一行程序中使用bash测试失败的命令
EN

Stack Overflow用户
提问于 2016-09-03 21:13:54
回答 3查看 78关注 0票数 1

我想输出命令成功的文件名,当我预计它会失败的时候,同时抑制警告。我更喜欢一句笑话。

大致是这样的:

代码语言:javascript
运行
复制
find xml/malformed-xml -type f -iname '*.xml' -exec if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo "Should have failed for {}"; fi \;

代码语言:javascript
运行
复制
find xml/malformed-xml -type f -iname '*.xml' -print0 | xargs -0 -n 1 -i if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null ; then echo "Should have failed for {}"; fi

到目前为止,我没有得到太多的爱。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-03 21:21:48

试试这个:

代码语言:javascript
运行
复制
find xml/malformed-xml -type f -iname '*.xml' -exec xmllint --noout --dtdvalid check-xml.dtd  {} \; -print 2>/dev/null

说明:在find中,参数由-and隐式分隔。所以-exec ... {} \; -print实际上就是-exec ... {} \; -print。现在,由于-and的短路逻辑,第二部分只有在第一部分成功的情况下才会执行。

这两个建议都失败的原因是,if ... then ... else ...不是一个程序,它是一个bash内置程序,所以您不能从find -execxargs调用它。这两个程序都只能执行实际的程序。

票数 1
EN

Stack Overflow用户

发布于 2016-09-03 21:22:32

我想这可能会对你有所帮助:

Is there a TRY CATCH command in Bash

使用||&&,您可以替换为try-catch类型的行为

票数 0
EN

Stack Overflow用户

发布于 2016-09-03 21:29:03

尝试使用"-exec sh -c ...“调用子外壳。

代码语言:javascript
运行
复制
find xml/malformed-xml -type f -iname '*.xml' -exec sh -c "if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo Should have failed for {}; fi" \;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39307313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档