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

管道传输时调整curl输出:实现右移4空格并保留动态更新

解决curl输出缩进并保留动态进度更新的方法

问题根源

  • curl的动态进度行依赖\r(回车符)回到行首覆盖内容,默认的read命令会缓冲输入直到换行,导致进度行延迟显示
  • 直接替换\r为换行符会破坏动态更新特性,变成冗余的多行输出

正确实现命令

使用stdbuf关闭缓冲,结合awk逐字符处理,既实现4空格缩进,又保留进度行的动态更新效果:

curl -O <url> 2>&1 | stdbuf -i0 -o0 awk '{
    for (i=1; i<=length($0); i++) {
        c = substr($0, i, 1)
        if (c == "\r") {
            printf "\r    "
        } else {
            printf "%s", c
        }
    }
    printf "\n"
}'

原理拆解

  • stdbuf -i0 -o0:关闭curl和awk的输入输出缓冲,确保每一个字符都被实时处理,避免进度延迟
  • awk逐字符处理逻辑:
    • 遇到\r时,先输出\r回到行首,紧接着输出4个空格,保证后续更新的进度内容从缩进位置开始覆盖
    • 普通字符直接输出,完全保留原始内容的格式、换行等特性
    • 每行末尾补换行符,处理正常的非进度输出行

替代方案(无stdbuf时)

如果系统没有stdbuf工具,可以用unbuffer(需安装expect包)替代:

curl -O <url> 2>&1 | unbuffer awk '{
    for (i=1; i<=length($0); i++) {
        c = substr($0, i, 1)
        if (c == "\r") {
            printf "\r    "
        } else {
            printf "%s", c
        }
    }
    printf "\n"
}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:42:48