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

如何在zsh函数中获取ls输出到终端(非管道/文件)时的行数?

获取zsh中ls表格输出的终端行数

要解决这个问题,核心是让ls在管道中仍保持终端里的多列表格输出格式,再统计行数。以下是两种可行方法:

方法1:强制多列输出并指定终端宽度

ls默认在管道中切换为单列输出,用-C参数可强制多列,同时通过COLUMNS环境变量指定当前终端的实际宽度(确保输出格式和终端显示一致),再用wc -l统计行数:

# 获取当前终端宽度
local term_width=$(tput cols)
# 生成表格格式输出并统计行数
local ls_table_lines=$(COLUMNS=$term_width ls -C | wc -l)
echo "ls表格输出行数:$ls_table_lines"

解释:tput cols会读取当前终端的列数,COLUMNS=$term_width让ls按照终端实际宽度排版多列,这样输出的内容和你直接在终端敲ls的表格格式完全一致,wc -l就能得到正确的行数。

方法2:用伪终端模拟终端环境

借助script命令创建伪终端,让ls误以为在终端输出,从而保持表格格式:

Linux系统

local ls_table_lines=$(script -q -c "ls" /dev/null | wc -l)
echo "ls表格输出行数:$ls_table_lines"

macOS系统

local ls_table_lines=$(script -q /dev/null ls | wc -l)
echo "ls表格输出行数:$ls_table_lines"

解释:script会模拟一个完整的终端环境,ls在这种环境下会输出多列表格而非单列,后续的wc -l就能统计到终端显示的行数。注意不同系统的script参数略有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:35:58