在 Kubuntu 20.04、bash 5.0.17 中,有些天我在编写工作 bash 脚本时遇到了各种问题。现在我发现bash有问题。例如,在关键字“export”之后,名称或任何字符都会被忽略,因此打印列表就像没有给出名称或选项 -p 一样。
在寻找原因时,我按如下方式调用 dmesg:
dmesg -s $((10*1024*1024)) -T | less +G
输出1986行。
通常,我的 dmesg 输出要长得多,并且从一开始就显示了一些行,这些行显示了它的开始时间和启动时间。
但是这个 dmesg 输出以以下几行开头:
+++++
[Wed Jan 12 03:07:46 2022] microcode: microcode updated early to revision 0x28, date = 2019-11-12
[Wed Jan 12 03:07:46 2022] Linux version 5.4.0-42-generic (buildd@lgw01-amd64-038) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 (Ubuntu 5.4.0-42.46-generic 5.4.44)
[Wed Jan 12 03:07:46 2022] Command line: BOOT_IMAGE=/casper/vmlinuz file=/cdrom/preseed/kubuntu.seed maybe-ubiquity persistent splash ---
[Wed Jan 12 03:07:46 2022] KERNEL supported cpus:
[Wed Jan 12 03:07:46 2022] Intel GenuineIntel
[Wed Jan 12 03:07:46 2022] AMD AuthenticAMD
[Wed Jan 12 03:07:46 2022] Hygon HygonGenuine
[Wed Jan 12 03:07:46 2022] Centaur CentaurHauls
[Wed Jan 12 03:07:46 2022] zhaoxin Shanghai
[Wed Jan 12 03:07:46 2022] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[Wed Jan 12 03:07:46 2022] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
我已在此设备上运行 ClamAV;在此设备上未发现病毒。
此 dmesg 输出是否真的意味着在操作系统连续运行时微代码已更改?
我的计算机上的微码升级是否确实可以静默进行?
问候 Antandhidh
=====
我必须补充:
A)
type -a export yields
export is a shell builtin
b)
我有四个虚拟桌面。在其中一个虚拟桌面中,终端模拟器“konsole”正在运行。
这个konsole下有八个窗口,每个窗口中有一个bash shell。
所有这八个 shell bash 都表现出同样的错误。
C)
如果在未使用的桌面上我调用 ALT-F2 来执行命令,则 shell 也同样有问题。
d)
如果我使用基本终端 tty1..tty4 之一,它是直接的,不在 GUI 下且在“konsole”下,那么 bash shell 没有错误,我的代码相同
export VAR
工作正常。
e)
当我在未使用的 GUI 桌面中调用“konsole”时,会在终端中为用户 kubuntu 打开 bash。
在这个 bash shell 中
export WEx1="111"
没有给出错误,并且
declare -p WEx1
正确显示
declare -x WEx1="111".
和
printenv | grep We
正确显示
WEx1=111
当我为 root 创建一个子 shell 时(就像我一直做的那样)
sudo su
和
export WEx2="222"
与用户 kubuntu 的父 shell 中的情况一样,所有内容都是正确的。
F)
现在我觉得这个问题要细分为两部分:
1.
在一个无故障的 bash 中,如果有人写
export VAR
如果没有像 VAR="vvv" 这样的赋值,则 VAR 不在 printenv 中,但所有其他工作都没有错误。
这是正常的,这不是我提出问题的原因。
2.
我的问题的原因是这种错误的行为:
如果有人写
export abcd \<newline\>
然后 bash 会忽略导出和 <newline> 之间的所有内容,以便 bash 打印列表
declare -x ...
declare -x ...
ETC
如果在关键字 export 之后没有指定名称或给出选项 -p ,则应该如此。
问候 Antandhidh
=====
在此期间发生了两件事,而我自己没有采取任何相关行动:一件是坏事,另一件是好事。
不好的一点是:
我的 8 个 bash shell 中的一些出现了明显的失败,即:
我将 bash 历史文件保存在 U 盘中的目录中
/media/WE_MNT_HISTFIL/.bash_history.WE-01
当我写的时候
回显 $HISTFILE
在有缺陷的外壳中,答案是
/media/ MNT HISTFIL/root/.bash_history
用 3 个空格和 1 个空格代替字符。
这不仅仅是显示的问题,这是内部的问题。
尽管各种检查显示 USB 记忆棒上的目录名称仍然正确,但某些内部应用程序无法使用该名称。
例如 FCEDIT 长期以来被定义为:
vim -u /media/WE_MNT_HISTFIL/root/.vimrc
在有缺陷的外壳中,这不再起作用。
补救措施是:我在用户 kubuntu 的第一级 shell 上始终有一个用户 root 的子 shell。
我必须退出,杀死这个子 shell 并调用一个新的。
但这在第一次尝试时并不幸运。
好的一点是:
现在,与几天前相比,如果在相同的旧“konsole”下,我通过将鼠标放在“Fensterleiste”的选项卡之一上创建一个附加窗口,然后右键单击以获取上下文菜单并选择“创建新窗口” ”,那么第一级和第二级 shell 就可以正常工作了。
因此,我创建了一组新的 shell,并将历史记录和我的所有工作转移到新的 shell 中。
我很高兴不需要新靴子。
问候 Antandhidh