You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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()返回对应状态码:

  1. 创建脚本文件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);
}
  1. 执行脚本:
jshell error_check.jsh
echo $? # 执行无效代码时会返回1

内容的提问来源于stack exchange,提问作者ka3ak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:31:10