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

如何让caller.sh自动获取separate_file.sh的命令输出?

解决方案

方案一:修改separate_file.sh,让输出同时显示并保留捕获能力

在separate_file.sh开头添加一行重定向配置,让所有标准输出同时输出到终端和原标准输出流,这样既不影响caller.sh用$(...)捕获输出,也能让调用者实时看到内容:

#!/bin/bash
# 新增该行:将stdout同时输出到终端和原输出流
exec > >(tee /dev/tty)

echo '1'
ls -la

caller.sh无需修改,执行时separate_file.sh的所有输出会直接显示在终端,同时$(separate_file.sh)依然能捕获输出用于原逻辑判断。

方案二:修改caller.sh的判断逻辑,基于退出码直接执行脚本

原代码通过$(...)捕获输出判断“失败”的逻辑不够可靠,更合理的方式是基于脚本的退出状态码(成功为0,失败非0)判断。修改caller.sh如下:

#!/bin/bash -e
# 直接执行脚本,通过!取反判断是否失败,输出会直接显示
if ! separate_file.sh; then
    echo 'separate_file.sh failed'
fi

这种方式无需修改separate_file.sh,执行时脚本输出会直接展示给调用者。同时!会将separate_file.sh的非0退出码转为0,不会触发-e选项导致caller.sh提前退出,完美保留-e给其他调用使用。

补充说明

  • 原代码[[ ! $(separate_file.sh) ]]的逻辑是“输出为空则判定失败”,但如果脚本执行成功但输出为空,也会触发错误提示,这可能不符合实际需求。方案二基于退出码判断,更贴合脚本执行成功/失败的定义。
  • 若必须保留原“输出为空则判定失败”的逻辑,方案一是更合适的选择;若可以切换为基于退出码判断,方案二更简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:25:33