Shell script 启动一个程序,如何实现程序运行成功且关闭时执行后续命令?

2014-08-10 02:17:45 +08:00
 lihuoqingfly
在linux或mac下,shell script 中要执行一个程序Foo(很耗时,且不是当前shell的子进程),需要Foo成功且自动关闭后再进行一些后续操作,该怎么实现?
6970 次点击
所在节点    问与答
8 条回复
ooxxcc
2014-08-10 02:47:39 +08:00
Foo && Bar
aa65535
2014-08-10 02:53:10 +08:00
Foo && {
# do something
}

或者

Foo
RETVAL="$?"
[ $RETVAL != 0 ] && exit 1
# do something

shell 中命令执行后是有退出码的,为零表示成功,非零表示失败。
所以你要保证 Foo 不会再执行失败时返回 0 就行了。
kfll
2014-08-10 09:18:26 +08:00
set -e
Foo
# 失败退出,成功继续脚本
lihuoqingfly
2014-08-10 10:00:45 +08:00
@ooxxcc
@kfll
@aa65535 试了各位的办法,程序Foo是GUI程序,一启动就返回结果$? == 0,是因为Foo是独立进程吗,而无法监听它是否关闭,所以后续命令还会先于Foo关闭时调用
aa65535
2014-08-10 11:49:21 +08:00
@lihuoqingfly 那这样的话只能循环检测程序是否退出了
# 下面的 test.sh 是你shell 脚本的名称
Foo
while true; do
  ps -ef | grep -v grep | grep -v "test.sh" | grep Foo || break
  sleep 5
done
# do something
gavingeng
2014-08-10 12:14:22 +08:00
@lihuoqingfly 你可以在shell进程中对前步逻辑进行监控,比如ps,或是checkpoint文件之类的,判断这些来做下一步的执行,不过都看需要了!
ooxxcc
2014-08-10 12:29:20 +08:00
@lihuoqingfly 你是 open -a /Application/xxx.app 还是 /Applications/xxx.app/Contents/MacOS/xxx 这样运行的,要后面这个
clino
2014-08-10 14:32:49 +08:00
sh -e

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX