首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell -在失败时运行其他命令

Shell -在失败时运行其他命令
EN

Stack Overflow用户
提问于 2010-04-16 22:04:36
回答 3查看 537关注 0票数 1

我有一个我目前正在运行的脚本,它对除一个实例之外的所有实例都很有效:

代码语言:javascript
复制
 #!/bin/sh
 pdfopt test.pdf test.opt.pdf &>/dev/null
 pdf2swf test.opt.pdf test.swf
 [ "$?" -ne 0 ] && exit 2

上面的代码后面还有更多要执行的代码行...

如果"pdf2swf test.opt.pdf test.swf“失败,我该如何更改此脚本以运行"pdf2swf test.pdf test.swf”?如果第二次尝试失败,那么我将"exit 2“。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-16 22:19:48

尝试:

代码语言:javascript
复制
/path/to/pdfopt test.pdf test.opt.pdf >/dev/null && {

    pdf2swf test.opt.pdf test.swf
    ... maybe do more stuff here, in the future ...
    exit_here_nicely
} 

code_that_is_reached_if_pdfopt_failed

在您的示例中:

代码语言:javascript
复制
pdfopt test.pdf test.opt.pdf &>/dev/null

... pdfopt在后台运行,您不知道它可能需要多长时间才能完成。让它阻塞,这样只有当它工作时,才能访问括号中的代码。

一个函数包装,可以很容易地在后台启动,但每个进程都会阻塞,直到第一个命令按预期退出。

票数 1
EN

Stack Overflow用户

发布于 2010-04-16 22:11:27

短路"OR“应该做你想做的事情:

代码语言:javascript
复制
pdf2swf test.opt.pdf test.swf || pdf2swf test.pdf test.swf
票数 5
EN

Stack Overflow用户

发布于 2010-04-16 22:07:46

也许你想要一个Makefile而不是一个shell脚本。如果其中一个命令失败,makefile将自动中止。或者,您可以在每个命令后添加[ "$?" -ne 0 ] && exit 2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2653483

复制
相关文章

相似问题

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