我的Bash代码:
#!/bin/sh set -ex function func () { sleep $1 echo $1 if [ $1 -eq 10 ]; then exit 1 fi } func 10 & pid_a=$! func 5 & pid_b=$! func 3 & pid_c=$! wait $pid_b if [ $? -eq 0 ];then echo "b.ksh SUCCESS"; else echo "b.ksh Failed"; fi wait $pid_c if [ $? -eq 0 ];then echo "c.ksh SUCCESS"; else echo "c.ksh Failed"; fi wait $pid_a if [ $? -eq 0 ];then echo "a.ksh SUCCESS"; else echo "a.ksh Failed"; fi
当它启动set -ex运行时:
sh-4.2$ ./ex.sh + pid_a=16341 + func 10 + pid_b=16342 + sleep 10 + func 5 + pid_c=16343 + sleep 5 + wait 16341 + func 3 + sleep 3 + echo 3 3 + '[' 3 -eq 10 ']' + echo 5 5 + '[' 5 -eq 10 ']' + echo 10 10 + '[' 10 -eq 10 ']' + exit 1
Bash脚本来检测我的USB插入,然后与目录同步
使用bash按第5列对csv文件进行sorting
如何在bash脚本中使用awk过滤两个date之间的数据
如何在BASH中对文件进行多次编辑,而不经常写入硬盘?
Bashredirect结合“双pipe”符号
(bash)用猫缩进多行文字到$ VAR?
Jupyter笔记本电脑没有正确启动在Windows Ubuntu的bash
如何让bash subshellinheritance父级的设置选项?
在OSX中永久设置PATH环境variables
你做不到
command if [ $? -eq 0 ]; then ...
在一个set -e -using脚本中。 由于命令的非零退出状态甚至到达if之前,脚本将会结束。
wait等待进程的退出状态作为自己的退出状态(否则无论如何, $? check将是毫无意义的)。 试试这个:
if wait $pid_x; then echo "x.ksh SUCCESS" else echo "x.ksh Failed" fi
bash的手册中提到set -e :
-e如果一个简单的命令(见上面的SHELL GRAMMAR)以非零状态退出,立即退出。 如果失败的命令是命令列表的一部分,或者until关键字, if语句中的测试的一部分, &&或者||一部分,那么shell不会退出。 列表,或者如果命令的返回值是通过! 。 如果设置了ERR,则会在shell退出之前执行陷阱。
它没有提到任何有关'当后台进程以非零状态退出,shell不会终止' – 所以当后台进程失败时它终止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。