如何让JShell执行无效Java表达式时返回非零退出码?
让JShell在执行无效表达式时返回非零状态码
问题场景
在Linux环境下,JShell即使执行无效的Java表达式,也始终以状态码0退出,示例如下:
$ echo "invalid java expression" | jshell - Error: ';' expected invalid java expression; ^ $ echo $? 0
解决方案
JShell本身没有内置参数直接控制错误退出状态码,但可以通过以下两种方式实现需求:
方法1:命令行层面捕获错误输出
通过重定向输出并检查错误标识,手动设置退出状态码:
echo "invalid java expression" | jshell - 2>&1 | grep -q "Error:" && exit 1 || exit 0
2>&1:将标准错误输出合并到标准输出,确保grep能捕获错误信息grep -q "Error:":静默检查输出中是否包含错误标记,匹配成功返回0,失败返回1&& exit 1 || exit 0:根据grep结果设置当前shell的退出状态码,检测到错误则返回非零值
方法2:通过JShell脚本自定义退出逻辑
编写包含错误检查逻辑的JShell脚本,调用System.exit()返回对应状态码:
- 创建脚本文件
error_check.jsh:
// 要执行的目标代码 invalid java expression // 检查诊断信息中的错误 var diagnostics = jdk.jshell.JShell.instance().diagnostics(); if (diagnostics.anyMatch(d -> d.getKind() == jdk.jshell.Diagnostic.Kind.ERROR)) { System.exit(1); }
- 执行脚本:
jshell error_check.jsh echo $? # 执行无效代码时会返回1
内容的提问来源于stack exchange,提问作者ka3ak
相关产品推荐
相关产品推荐

