Linux终端中如何仅获取命令有限行输出?head不生效如何解决
问题描述
我想要获取命令输出的前5行,常规方法是使用head指令,但该方法并非对所有命令都生效,以下为相关示例:
head指令对nping命令生效
rajkumar:~/automation$ nping | head -5 Nping 0.7.60 Usage: nping [Probe mode] [Options] {target specification} TARGET SPECIFICATION: Targets may be specified as hostnames, IP addresses, networks, etc. rajkumar:~/automation$ nping | wc -l 119 rajkumar:~/automation$
- 但
head指令对iperf3命令不生效,该命令需要传入预定义的命令行参数,未匹配参数时会输出错误,该如何解决这一问题?
rajkumar:~/automation$ iperf3 | head -5 Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Server or Client: -p, --port # server port to listen on/connect to >>>>>>>>>> 已截断输出 <<<<<<<<<<<<<<<< [KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga- iperf3: parameter error - must either be a client (-c) or server (-s) <<<< iperf3命令给出的错误提示 rajkumar:~/automation$
解决方案
核心原因
head对iperf3无截断效果的本质是:命令的报错信息默认输出到标准错误流(stderr),而管道|仅会传递标准输出流(stdout)的内容到下游命令,因此head无法捕获到iperf3的参数错误提示,自然无法做截断处理。
可用解决方法
方法1:重定向错误流到输出流
执行命令时将stderr重定向到stdout,就能让head正常捕获所有输出并截断:
iperf3 2>&1 | head -5
方法2:主动调用帮助参数获取标准输出
如果是要查看iperf3的帮助信息,直接传入-h参数触发帮助输出即可,合法参数触发的常规输出默认走stdout,可以直接被head捕获:
iperf3 -h | head -5
内容的提问来源于stack exchange,提问作者Raj Kumar Mishra
相关产品推荐
相关产品推荐

