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

Java程序输出导入Shell脚本遇问题:Bash测试时异常直接输出

问题解决步骤

你的脚本有三个关键问题导致当前状况:

  • Java程序抛出的异常信息输出到标准错误流(stderr),而$(...)默认只捕获标准输出流(stdout),所以异常会直接打印到终端,没被actualOutput变量捕获
  • 变量名拼写错误:expectedOuput多打了个u,应该是expectedOutput
  • if判断里的变量没加双引号,当变量为空时会导致Bash语法错误

修正后的脚本

#!/bin/bash

input=""

expectedOutput="Please enter correct input"

# 把stderr重定向到stdout,让异常信息也被捕获
actualOutput=$(java CurrencyConverter "$input" 2>&1)

# 变量加双引号,避免空值导致语法错误
if [ "$expectedOutput" == "$actualOutput" ]; then
    echo "Test 1 Passed"
else
    echo "Test 1 Failed"
fi

各修改点说明

  1. 重定向错误流:在命令末尾加2>&1,意思是把stderr(文件描述符2)的内容重定向到stdout(文件描述符1),这样$(...)就能捕获到Java程序的所有输出(包括异常)。
  2. 修正变量名:把expectedOuput改成expectedOutput,确保判断时变量名一致。
  3. 变量加双引号:"$expectedOutput"和"$actualOutput"加双引号,防止变量为空时,Bash把[ == ]当成无效语法报错。

现在运行脚本,就能捕获到Java的异常信息,然后和期望的输出对比,输出Test 1 Failed,同时不会直接打印Java错误(除非你在脚本里主动输出actualOutput)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:35:48