我正在使用崩溃包自动化测试。是否有类似的东西$?
,可以用来检查前一个命令是否在崩溃 shell 内成功执行?
例如,当命令:
crash> bt -a
执行了,如何知道执行成功与否?我心中唯一的解决方案是对结果进行grep,但当环境发生变化时,它并不可靠。
这就是我尝试时得到的结果echo $?
:
crash> bt asd
bt: invalid task or pid value: asd
crash> $?
crash: command not found: $?
crash> echo $?
0
crash>
crash> q
root@at0012-ubuntu:~/crashKernel#
$?
总是显示为 0。
几天前我已经向超级用户提出了这个问题,但没有得到任何帮助。任何帮助,将不胜感激。
答案1
正如 @Anthon 所暗示的,这不是像 Bash 或 Dash 这样的“正常”*nix shell,而是特定于应用程序的提示(q
不是POSIX 内置实用程序例如)。从快速浏览来看man crash
看起来没有命令可以获取最后一个命令的退出代码。
答案2
抱歉——我误解了原来的问题。
答案是否定的,没有办法判断崩溃实用程序命令是否已成功完成。被调用来执行命令的函数都是 void 函数,例如,“bt”命令的声明如下:
无效 cmd_bt(无效) { ... }
答案3
正如 @l0b0 已经澄清的那样,这不是一个normal
shell。除此之外,它似乎没有echo
作为您可以在提示符下键入的命令。比较:
crash -h bt
和
crash -h echo
0
如果您按照提示尝试,可能会得到相同的结果crash>
:
spam ?0
答案4
崩溃实用程序的“bt”命令为您提供给定任务最后一次进入内核模式的堆栈回溯,无论是通过系统调用还是异常。它没有关于不再存在的任务(即先前由 bash shell 执行的任务)的状态的概念。