首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从脚本调用脚本

从脚本调用脚本
EN

Stack Overflow用户
提问于 2013-02-26 07:45:17
回答 3查看 363关注 0票数 2

如何让我的shell脚本回显它调用的脚本失败了?

代码语言:javascript
复制
#!/bin/sh

test="/Applications/test.sh"

sh $test

exit 0
exit 1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-26 07:53:02

我通常采取以下方法:

代码语言:javascript
复制
#!/usr/bin/env bash

test="/Applications/test.sh"
sh "${test}"
exit_status=$?
if [[ ${exit_status} ]] ; then
    echo "Error: ${test} failed with status ${exit_status}." >&2
else
    echo "Success!"
fi
票数 1
EN

Stack Overflow用户

发布于 2013-02-26 07:47:20

代码语言:javascript
复制
#!/bin/sh

if sh /Applications/test.sh; then
    echo "Well done $USER"
    exit 0
else
    echo "script failed with code [$?]" >&2
    exit 1
fi

应该对/Applications/test.sh脚本进行良好的编码,以便以常规状态退出。如果正常则为0,如果失败则为> 0

如你所见,我们直接使用boolean expression,不需要测试特殊变量$?

票数 3
EN

Stack Overflow用户

发布于 2013-02-26 07:56:48

就最佳实践而言,您不应该这样做。如果脚本失败,它应该在终止之前发出一条错误消息,这样它的父脚本就不必终止了。这样做的主要原因是,进程知道它失败的原因,而父进程只能猜测。换句话说,你应该这样写:

代码语言:javascript
复制
#!/bin/sh

test="/Applications/test.sh"

sh $test

尽管实际上,更典型的做法是这样写:

代码语言:javascript
复制
#!/bin/sh
/Applications/test.sh

test.sh将发出必要的错误消息,并且您的脚本将返回与test.sh相同的值。而且,在当前形式下,即使test.sh实际上失败了,您的脚本也总是成功的,因为exit 0; exit 1是毫无意义的:exit 1永远不会被调用。

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

https://stackoverflow.com/questions/15078737

复制
相关文章

相似问题

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