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

如何将被调用Shell脚本的echo输出传入调用脚本的日志方法参数

让script_2的输出通过script_1的log方法写入日志

首先得明确:你想直接用log(/path/to/script_2)这种方式是行不通的——log是个Shell函数,它接收的是字符串参数,这么写只会把脚本路径作为文本写入日志,根本不会执行脚本并捕获它的输出。

下面给你几个实用的可行方案,按需选择:

方案1:逐行捕获script_2输出并写入日志

这是最贴合你现有log方法使用习惯的方式,能把script_2的每一行输出都单独调用log写入日志:
在script_1里把调用script_2的代码替换成:

# 捕获script_2的标准输出,逐行传给log函数
/path/to/script_2 | while read -r line; do
    log "$line"
done

这里用管道将script_2的标准输出导向while循环,read -r line会逐行读取输出内容,然后调用log把每行内容写入日志文件,和script_1本身的日志格式保持一致。

方案2:一次性捕获所有输出写入日志

如果script_2的输出内容不多,不需要逐行处理,也可以一次性捕获全部输出后传给log:

# 捕获script_2的所有输出(包括换行符)
script_output=$(/path/to/script_2)
# 把捕获到的内容传给log写入
log "$script_output"

注意这里必须用双引号包裹$script_output,这样才能保留输出里的换行符,避免所有内容被挤成一行。

方案3:让script_2直接调用script_1的log函数(需修改script_2)

如果允许修改script_2的代码,可以让它在script_1的环境中运行,从而直接使用log函数:

  1. 先在script_1里把调用方式从直接执行改成source:
# 用source让script_2在当前Shell环境运行,能直接访问log函数和变量
source /path/to/script_2
  1. 然后修改script_2里的echo语句,换成调用log:
#!/bin/sh
log "This is logging from script 2"

这个方案的好处是script_2的日志逻辑和script_1完全统一,但缺点是script_2会依赖script_1的环境,无法单独运行(除非你也在script_2里单独定义log函数)。

总结一下:如果不想修改script_2,优先选方案1;如果script_2输出量小,方案2更简洁;如果可以修改script_2且希望日志逻辑统一,方案3是不错的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:32:53