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

为何awk处理ssh -V输出与echo输入时结果不一致?

问题:ssh -V输出通过awk处理无法正确分割字段

尝试用awk指定字段分隔符_提取第一个字段时,遇到以下异常情况:

  • 直接通过管道处理ssh -V的输出,两种awk写法都无法得到预期结果,终端仍显示完整的版本字符串
  • 用echo输出相同字符串再管道给awk,却能正确提取出第一个字段OpenSSH

失败案例1

[root@centos ~]# ssh -V | awk -F_ '{print $1}'
Output: OpenSSH_8.7p1, OpenSSL 3.0.7 1 Nov 2022

失败案例2

[root@centos ~]# ssh -V | awk 'BEGIN{FS="_"} {print $1}'
Output: OpenSSH_8.7p1, OpenSSL 3.0.7 1 Nov 2022

正常案例(使用echo)

[root@centos ~]# echo "OpenSSH_8.7p1, OpenSSL 3.0.7 1 Nov 2022" | awk -F_ '{print $1}'
Output:  OpenSSH

原因分析

核心问题是ssh -V的输出内容默认打印到标准错误流(stderr),而管道|仅会传递**标准输出流(stdout)**的内容。因此awk根本没有接收到ssh -V的输出数据,你看到的终端内容其实是ssh -V直接输出到stderr的原始信息,并非awk的处理结果。

解决方案

将ssh -V的stderr重定向到stdout,让管道能传递输出内容给awk:

ssh -V 2>&1 | awk -F_ '{print $1}'

执行后就能得到预期的OpenSSH结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:21:05