我在持续集成服务器上使用bash脚本中的工具。
我想知道脚本中的命令何时失败,因此我可以提前退出并将构建标记为失败。
仪器向控制台显示LOG ERROR,但我没有成功获得返回值。
我怎样才能做到这一点?
如果有:
if (!isValid) {
AppDatePickerDialog datePicker = new AppDatePickerDialog();
datePicker.show(getSupportFragmentManager(), "YOUR_TAG");
}
可以执行以下操作:
instruments -w "iPhone 6 (8.3 Simulator)" -t
提前致谢
答案 0 :(得分:1)
相当容易:
instruments -w "iPhone 6 (8.3 Simulator)" -t
if (( $? > 0 ))
then
echo "instruments commands failed with error: $?" >&2
fi
(( ))
表示法用于算术比较。字符串模式比较使用[[ ... ]]
完成。小心使用正确的间距,通常在shell中使用空格作为分隔符,因此它可能很重要。
另一种语法可能是:
if instruments -w "iPhone 6 (8.3 Simulator)" -t
then
echo "it worked"
else
echo "it failed"
fi
这通常更可取。但我认为在这种情况下,我展示的风格更符合你的需要。
特殊变量?
给出上一个命令的返回值。使用$
进行前缀可为我们提供变量的值。按照惯例,返回值为零表示成功,1-255表示错误(UNIX / Linux上的范围为0-255,一个字节)。每个错误编号的重要性都是特定于应用程序的,因此您必须阅读文档以查找其含义。
请记住,$?
为我们提供了上一个命令的返回值,因此即使echo
也会重置它!
>&2
表示"将输出发送到标准错误流"。错误消息应该放在这里,这也是已知的stderr,文件描述符2.如果你从脚本重定向输出,这是一件好事。
编辑:毕竟,Apple似乎没有记录instruments
命令的退出代码,我检查了man
页面。在我看来这很差,但是你做的并不多。在像C(和可能是ObjC)这样的语言中,如果程序在没有设置退出代码的情况下结束,那么你只需获得在内存中存在的任何旧值。所以你甚至不能依靠零成功 - 除非你不知道其他?