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

如何在同一行将命令输出存入变量并重定向至文件?

如何在同一行命令中同时将输出存入变量并重定向到文件

我来帮你搞定这个问题!你遇到的情况是原命令的重定向逻辑没踩对,导致没法实现“同时存变量和文件”的需求,咱们一步步拆解清楚:

原命令的问题

你写的这条命令:

a=`cat /etc/redhat-release | awk '{print $2}' > /tmp/a.txt`

核心问题在于:重定向> /tmp/a.txt直接把awk的输出送到了文件里,而命令替换`...`捕获的是整个子shell的标准输出——但awk的输出已经被重定向走了,所以变量a会变成空字符串。如果你的/tmp/a.txt也没内容,大概率是命令执行时出了小问题(比如文件不存在、权限不足),但核心需求的实现逻辑本身就不对。

正确方案:用tee命令

tee命令的本职工作就是把输入同时输出到标准输出和指定文件,完美匹配你的需求:既让命令替换捕获标准输出赋值给变量,又把内容写入目标文件。

写法1(保留你的管道结构)

a=$(cat /etc/redhat-release | awk '{print $2}' | tee /tmp/a.txt)

写法2(更简洁,去掉多余的cat)

a=$(awk '{print $2}' /etc/redhat-release | tee /tmp/a.txt)

执行完这条命令后:

  • 输入echo $a能看到提取出的版本号
  • 输入cat /tmp/a.txt也会看到完全相同的内容

替代方案(不用tee,一行完成)

如果你不想用tee,也可以先把输出存到变量,再把变量写入文件,用分号分隔成一行命令:

a=$(awk '{print $2}' /etc/redhat-release); echo "$a" > /tmp/a.txt

不过这个方法会执行两次输出操作,效率不如tee高。

内容的提问来源于stack exchange,提问作者Manoj.V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:43:31