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

Bash脚本执行onmt_translate后results变量赋值为空问题

问题根因

results变量赋值为空不是bash语法问题,是onmt_translate的输出规则和预期不符:

  • 命令携带-output model1_step_10000_temp_pred参数时,核心翻译结果会直接写入指定的输出文件,不会输出到标准输出流
  • 携带-verbose参数打印的运行进度、日志信息默认走标准错误流(stderr),而命令替换$()默认仅捕获标准输出流(stdout)的内容,自然只能拿到空值。
修复方案

方案1:直接读取输出文件获取翻译结果(推荐,匹配脚本需求)

脚本本身需要的是最终IPA转录结果,无需捕获命令运行输出,直接读取-output参数指定的结果文件即可,替换对应代码段如下:

#!/usr/bin/env bash

if [ -z "$1" ]
then
  echo "You did not enter a word for translation, Please enter one now: "
  read current
else
  current=$1
fi

echo "The word you chose for translation: $current"

onmt_word=$(python ONMT_DATA_FORMAT.py "$current")
# 变量引用加双引号避免特殊字符解析异常
echo "$onmt_word" > temp_word.txt

# 直接运行翻译命令,结果写入指定文件
onmt_translate -gpu -1 -model eng_ipa_model1_steps/eng_ipa_model1_step_100000.pt -src temp_word.txt -replace_unk -verbose -output model1_step_10000_temp_pred

echo "The provided IPA translation is:"
# 直接从结果文件中过滤提取目标IPA内容
egrep -o '< .* >' model1_step_10000_temp_pred
echo "Please ignore the first and last symbol, these are needed for the translation process."

方案2:捕获命令运行日志

如果确实需要把-verbose输出的运行日志存入变量,需要将标准错误流重定向到标准输出流,修改赋值语句如下:

results=$(onmt_translate -gpu -1 -model eng_ipa_model1_steps/eng_ipa_model1_step_100000.pt -src temp_word.txt -replace_unk -verbose -output model1_step_10000_temp_pred 2>&1)

注意:该方法捕获的是运行日志,并非最终翻译结果,最终转录结果仍然存储在-output指定的文件中,不要混淆。

额外优化建议
  • 所有变量引用时建议包裹双引号,比如echo "$onmt_word"、echo "$results",避免IPA特殊符号、空格被shell错误解析导致内容丢失、格式错乱
  • 脚本开头可添加set -e配置,前置命令执行失败时直接退出,避免后续逻辑在异常状态下运行输出空内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:54:35