如何制作显示命令输出的文本框?基于Bash环境
嘿,在Bash环境里实现能展示命令输出的文本框,其实有两种实用的方向——一种是带交互式终端UI的文本框,另一种是纯ASCII格式的文本框(适合脚本里直接输出),我给你详细讲讲:
1. 用终端UI工具快速实现(dialog/whiptail)
这俩是Linux系统里常用的终端对话组件,能弹出带滚动条的文本框,体验更友好,适合交互式场景。
先确保工具安装:
- Debian/Ubuntu系:
sudo apt install dialog - RHEL/CentOS系:
sudo dnf install dialog
(whiptail很多系统默认自带,要是没有的话用同样的包管理命令安装就行)
- Debian/Ubuntu系:
示例用法:
比如要展示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
相关产品推荐
相关产品推荐

