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

升级Ubuntu至22.04.2后Gnome Terminal输出出现阶梯错位异常求助

升级Ubuntu至22.04.2后Gnome Terminal输出出现阶梯错位异常求助

我的环境信息

  • 系统:刚从Ubuntu 20.04升级到22.04.2(内核版本5.15.0-67)
  • 桌面环境:XFCE
  • 终端:Gnome Terminal 3.44.0

遇到的问题

我有一个每日运行了好几年的备份脚本,它会同时向终端输出信息,还会把内容写入日志文件。升级系统后第一次跑脚本,就发现了个奇怪的问题:

  • 有时候新输出的行不会像正常那样从终端最左侧开始,而是接在上一行的下一列位置显示,形成阶梯状错位
  • 这个现象不是一直出现,正常输出和异常输出会随机切换
  • 日志文件里的内容完全正常,所有行都是从左侧开头的,和终端输出不一致

终端异常输出示例


********** backup_type: tar_backup *******************************



********** group: ubu_ssd1 ***************************************



********** group: ubu_ssd1, element: root ************************
****************************************************************** mounting /dev/vg_ssd1/ubu_root_ssd1_snap on /mnt source device:
/dev/vg_ssd1/ubu_root_ssd1_snap source directory: /mnt destination
directory: /home/randy/Backup/home4/ubu_ssd1/update_2023_week_10 tar
--directory=//mnt --create --one-file-system --no-check-device --auto-compress --warning=no-file-ignored --file=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.3.tar
.
--listed-incremental=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.snar
tar update "/mnt" to
"/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.3.tar"
completed at 20230308-03:16:23. Elapsed time: 0 hrs 0 min 30 sec


********** group: ubu_ssd1, element: boot ************************
                            ******************************************************************
                                                                                              source device: sdb8
             source directory: /boot
                                    destination directory: /home/randy/Backup/home4/ubu_ssd1/update_2023_week_10
            tar --directory=//boot --create --one-file-system --no-check-device --auto-compress --warning=no-file-ignored --file=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_boot_ssd1_2023_week_10.3.tar

.
--listed-incremental=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_boot_ssd1_2023_week_10.snar
tar update "/boot" to "/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_boot_ssd1_2023_week_10.3.tar"
completed at 20230308-03:16:26.
Elapsed time: 0 hrs 0 min 0 sec

日志文件正常输出示例(精简版)

******************************************************************
********** backup_type: tar_backup *******************************
******************************************************************

******************************************************************
********** group: ubu_ssd1 ***************************************
******************************************************************

******************************************************************
********** group: ubu_ssd1, element: root ************************
******************************************************************
mounting /dev/vg_ssd1/ubu_root_ssd1_snap on /mnt
source device: /dev/vg_ssd1/ubu_root_ssd1_snap
source directory: /mnt
destination directory: /home/randy/Backup/home4/ubu_ssd1/update_2023_week_10
tar --directory=//mnt --create --one-file-system --no-check-device --auto-compress --warning=no-file-ignored --file=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.3.tar .  --listed-incremental=/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.snar
tar update "/mnt" to  "/home/randy/Backup/home4/ubu_ssd1/update_2023_week_10/ubu_root_ssd1_2023_week_10.3.tar"  completed at 20230308-03:16:23.
Elapsed time:  0 hrs  0 min 30 sec

我做过的排查

  1. 检查脚本代码:输出内容有普通的echo、带参数的echo -e,还有其他命令的输出,所有输出都是通过tee同时输出到终端和日志,理论上两者内容应该完全一致
  2. 写了测试脚本:循环执行500次echo命令,终端输出完全正常,没法复现这个错位问题

脚本里的相关代码片段

echo "mounting ${mntpnt_volume} on ${mntpnt}" | tee -a ${gc_logfile};
echo "source device: ${source_device}" | tee -a "${gc_logfile}";
echo "source directory: ${source_directory}" | tee -a "${gc_logfile}";
echo "destination directory: ${dest_directory}" | tee -a "${gc_logfile}";

echo -e "\n${c_stars1}${c_stars2}"  | tee -a ${gc_logfile};
echo -e "${c_stars1} ${star_gap_string}"        \
"${c_stars2:${star_gap}}"   | tee -a ${gc_logfile};
echo -e "${c_stars1}${c_stars2}"    | tee -a ${gc_logfile};

这个脚本在Ubuntu 20.04下跑了好几年都没问题,升级后才出状况,有没有大佬知道这是咋回事?


补充:我找到问题原因了!

问题出在脚本里调用了PulseAudio的paplay命令,并且是作为子进程从root用户执行的,这时候需要重置环境变量XDG_RUNTIME_DIR,这个操作的时序问题导致了终端输出错位。

本来想给问题加paplay和XDG_RUNTIME_DIR标签,但因为声望不够没法添加,希望能帮到遇到类似问题的朋友。


备注:内容来源于stack exchange,提问作者Randyman99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:47:36