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

如何制作显示命令输出的文本框?基于Bash环境

嘿,在Bash环境里实现能展示命令输出的文本框,其实有两种实用的方向——一种是带交互式终端UI的文本框,另一种是纯ASCII格式的文本框(适合脚本里直接输出),我给你详细讲讲:

1. 用终端UI工具快速实现(dialog/whiptail)

这俩是Linux系统里常用的终端对话组件,能弹出带滚动条的文本框,体验更友好,适合交互式场景。

  • 先确保工具安装:

    • Debian/Ubuntu系:sudo apt install dialog
    • RHEL/CentOS系:sudo dnf install dialog
      (whiptail很多系统默认自带,要是没有的话用同样的包管理命令安装就行)
  • 示例用法:
    比如要展示ls -l的输出,用dialog的话直接这么写:

    dialog --textbox <(ls -l) 20 60
    

    这里的20是文本框的高度(行数),60是宽度(字符数),<(ls -l)是Bash的进程替换,把命令的输出直接传给dialog当输入。

    用whiptail的话语法类似:

    whiptail --textbox <(df -h) 18 70
    

    执行后会弹出一个带边框的文本框,你可以用上下键滚动查看完整输出,按ESC或者Enter退出。

2. 纯ASCII文本框(无依赖,适合脚本输出)

如果不想装额外工具,咱可以自己写个小函数,用Bash原生命令生成ASCII边框的文本框,把命令输出包在里面。

比如这个函数:

function boxed_output() {
    # 传入要执行的命令作为参数
    local cmd="$1"
    # 获取命令的输出内容
    local output=$($cmd)
    # 计算输出的行数和最长行的字符数
    local lines=$(echo "$output" | wc -l)
    local max_len=$(echo "$output" | awk '{print length}' | sort -n | tail -1)
    
    # 绘制顶部边框
    echo "+$(printf '%*s' "$max_len" '' | tr ' ' '-')+"
    # 逐行输出内容,左右加竖线,自动补空格对齐
    echo "$output" | awk -v len="$max_len" '{printf "|%-*s|\n", len, $0}'
    # 绘制底部边框
    echo "+$(printf '%*s' "$max_len" '' | tr ' ' '-')+"
}

把这个函数加到你的.bashrc里,或者直接在脚本里定义,然后就能这么用:

# 展示磁盘使用情况的ASCII文本框
boxed_output "df -h"
# 展示进程列表
boxed_output "ps aux"

小提示

  • 如果命令输出带ANSI颜色码,会干扰最长行长度的计算,你可以在获取输出时先去掉颜色:
    local output=$($cmd | sed 's/\x1b\[[0-9;]*m//g')
    
  • 要是输出内容特别长,ASCII文本框会直接铺满终端,这时候用dialog/whiptail的交互式滚动会更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:20:48