$ history
...
242 yum whatprovides */bin/xdotool
243 yum provides */bin/xdotool
244 yum provides xdotool
245 yum whatprovides xdotool
246 yum whatprovides xdotool
根据提示:
up
[root@localhost Downloads]# yum whatprovides xdotool
up
[root@localhost Downloads]# yum whatprovidesxdotool
up
[root@localhost Downloads]# yumtprovidesxdotool
up
[root@localhost Downloads]# yumtprovides*/bin/xdotool
up
[root@localhost Downloads]# yumwhattprovides*/bin/xdotool
请注意,在第一个调用的命令中,有一个不可打印的字符,我用☐
(unicode 框字符)表示,该字符在我的终端中不可见,并且不占用字符空间。在我的终端中我看到这个:
yum whatprovides xdotool
不是这个:
yum whatprovides ☐xdotool
使用cat -A
:
$ history | cat -A
...
246 yum whatprovides M-BM-^Vxdotool $
我在 Windows 10 上运行 Cygwin,mintty
并通过 shell 连接到 Fedora 29。
我正在使用系统默认值。
$ echo $PS1
[\u@\h \W]\$
我认为这与:
https://unix.stackexchange.com/a/31643/81989
当它在 PS1 中时,bash 会计算打印的字符数,以便在您滚动历史记录时可以正确重画。这就是 bash 有 [ 和 ] 特殊字符的原因——它们告诉 bash 所包含的字符不可打印,这有助于 bash 弄清楚如何在必要时重绘提示符。
我相信我的历史中这个不可打印的字符是导致它出错的原因。
我有兴趣了解这是如何以及为何发生的,但我也想知道:
- 有哪些可用选项或可以在不清除我的历史记录的情况下进行恢复
- Bash 是否可以配置为从命令历史记录中丢弃这些字符,以避免将来发生这种情况?
- 有没有办法识别出有问题的角色是什么?
顺便说一句,在命令历史记录中保留这些不可打印字符有什么好处?每当我遇到这个问题时,总是很麻烦。