【发布时间】:2020-02-07 10:11:31
【问题描述】:
尝试了解在类 Unix 操作系统(Mac、Linux)上重置背景颜色时的终端行为。
考虑一个 bash 脚本
#!/usr/bin/env bash
printf "\033[46m"
printf "On Cyan\n"
printf "\033[0m"
printf "Back to Normal\n"
当我最初运行这个脚本时,一切都符合预期。但是,如果我重复几次,打印结果就会改变。在"Back to Normal" 之后是青色背景色上的一行。
截图(终端,Mac OS Mojave):
问题:
- 这是为什么呢?谁能解释这种行为?
- 如果我更改了背景颜色并打印了一行(以换行符结尾),我该怎么做才能正确重置背景并避免出现这种不需要的尾随背景颜色?
为了您的信息,我已经在 Mac OS Mojave 终端和 Ubuntu 18.04 终端上测试了这种行为。我已经使用等效的 Python 3 脚本进行了测试。结果是一致的。我也尝试在 C/C++ 中使用fflush(stdout),但没有成功。
附:这个问题源于要在 Mac 或 Linux 上运行的 C++ 程序。我认为它与语言本身无关,因此我将其简化为 bash 脚本。 如果可能,请提出一个可以用 C/C++ 完成的解决方案。
【问题讨论】:
-
修复:
tput sgr0;不过,不太清楚为什么会发生这种情况。 -
@BenjaminW。谢谢。在运行脚本之前尝试了
tput sgr0。但是,不起作用。问题仍然存在。 -
确切地说,我尝试在
printf "\033[0m"之前和之后插入tput sgr0。但是,和以前一样,在重复脚本大约 10 次之后,问题又回来了。 -
我在 bash 终端上运行相同的脚本,但无法重现您的问题。
-
@PrateekJoshi 嗨。此问题通常在您快速重复大约 5-10 次后出现。您是否快速重复(例如使用向上箭头键 + 回车)并且重复了足够多的时间?
标签: c bash macos unix terminal