You need to enable JavaScript to run this app. 如何将多管道处理后的speedtest-cli输出赋值给Shell变量
优惠活动
大模型
产品
解决方案
定价
更多

如何将多管道处理后的speedtest-cli输出赋值给Shell变量

问题原因

你出现File name too long报错的核心是语法逻辑错误:
speedDown=$( "$theTest" | grep "Download:" | sed 's/[^ ]* //' ) 行中,你直接将存储了speedtest-cli完整输出的$theTest放在管道前,Shell会把这整段输出内容当做一个可执行命令/文件名去查找运行,自然会因为文件名过长触发报错。

修复方案

方案1:保留原有缓存完整输出的逻辑

只需要在管道前加echo将变量内容输出到标准输入,再传递给后续过滤命令即可:

#!/bin/sh
theTest=$(speedtest-cli)
speedDown=$(echo "$theTest" | grep "Download:" | sed 's/[^ ]* //')

方案2:更简洁的直接赋值写法(无需额外缓存完整输出)

直接将speedtest-cli的输出通过管道传递给过滤命令,一步拿到结果赋值给变量,内存占用更低:

#!/bin/sh
speedDown=$(speedtest-cli | grep "Download:" | sed 's/[^ ]* //')

优化写法:合并过滤逻辑减少进程调用

可以只用sed一步完成匹配+替换,省略grep命令:

speedDown=$(speedtest-cli | sed -n 's/^Download: //p')

该命令含义为:

  • -n 关闭sed默认输出所有行的逻辑
  • 匹配以Download: 开头的行,删除开头的Download: 前缀
  • p 指令将处理后的匹配行输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:51:03