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

Shell脚本调用dialog时无法识别命令输出换行符问题

问题根源

两个核心逻辑差异导致排版错乱:

  • 你手动在字符串中写入的\n是字面转义序列,dialog默认会识别该序列并渲染为换行
  • 你通过$(命令)捕获的命令输出,自带的是真实ASCII换行符(LF),dialog默认会将这类真实换行、连续空白做折叠合并,最终就出现内容挤成一团的问题。
解决方法

方法1:添加--no-collapse启动参数(推荐,改造成本最低)

直接在dialog的调用参数中加入--no-collapse,告诉dialog不要折叠文本中原有的空白、换行符,原有命令输出的格式会完整保留,不需要修改其他字符串拼接逻辑:

$DIALOG --title "Host OS Info" --no-collapse --msgbox "$sysInfo" 30 $SUPER_WIDE_WIDTH

加上参数后直接运行即可恢复正常排版。

方法2:统一换行格式为dialog可识别的转义序列

如果需要兼容不支持--no-collapse的旧版本dialog,可以提前把所有命令输出中的真实换行符替换为字面\n转义序列,和你手动添加的换行格式保持一致,dialog就能正常解析渲染。
以hwinfo的输出处理为例,其他变量按相同逻辑处理即可:

# 通过sed把输出里的真实换行全部替换为字面\n
local hwInfo="$(hwinfo --short | sed ':a;N;$!ba;s/\n/\\n/g')"
local usbDevs="$(lsusb | sed ':a;N;$!ba;s/\n/\\n/g')"
# 其余ipAddrs、release、uname、diskUsage变量都按上述方式处理

如果输出中存在制表符需要保留缩进,要么使用方法1的--no-collapse参数,要么同步把制表符替换为\t转义序列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:36