我在 WSL 上使用 openSUSE 42.3。在我上次更新期间(使用sudo zypper refresh && sudo zypper update
),Bash 从版本 4.3.42(1) 更新到版本 4.3-83.3.1。
我关闭了 Bash 窗口(简单地使用exit
)并重新启动了 Windows。Windows 重新启动后,我重新打开了 Bash 窗口,然后按下了Control+ X+ V。Bash 输出的仍然是旧版本号。
GNU bash,版本 4.3.42(1)-发布 (x86_64-suse-linux-gnu)
我检查了 的输出zypper info bash
,但它说版本 4.3-83.3.1 已安装。
Loading repository data...
Reading installed packages...
Information for package bash:
-----------------------------
Repository : oss_update
Name : bash
Version : 4.3-83.3.1
Arch : x86_64
Vendor : openSUSE
Installed Size : 742.5 KiB
Installed : Yes (automatically)
Status : up-to-date
Source package : bash-4.3-83.3.1.src
Summary : The GNU Bourne-Again Shell
Description :
Bash is an sh-compatible command interpreter that executes commands
read from standard input or from a file. Bash incorporates useful
features from the Korn and C shells (ksh and csh). Bash is intended to
be a conformant implementation of the IEEE Posix Shell and Tools
specification (IEEE Working Group 1003.2).
我还检查了 的输出zypper lr -d
,但我没有看到任何可以解释正在发生的事情的内容。
# | 别名 | 启用 | 类型 |
---|---|---|---|
1 | 开发语言go | 是的 | 转速-md |
2 | 开发语言_php | 是的 | 转速-md |
3 | 操作系统 | 是的 | 转速-md |
4 | oss_更新 | 是的 | 转速-md |
5 | server_php_extensions_php7 | 是的 | 转速-md |
为什么不使用 Bash 的更新版本?
我搜索了名称匹配的任何文件巴什(与sudo find /[^m]* -name "bash" -type f
, where/[^m]*
用于避免 /mount 目录,这是与该模式匹配的唯一目录)。它找到的唯一文件是 /bin/bash,其输出/bin/bash --version
如下。
GNU bash,版本 4.3.42(1)-release (x86_64-suse-linux-gnu) 版权所有 (C) 2013 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html
这是免费软件;您可以自由更改和重新分发它。在法律允许的范围内,不提供任何保证。
Zypper 如何认为它安装了我找不到已安装文件的更新?
作为旁注,我没有更改 Windows 用于启动 openSUSE 的符号链接,这意味着 WSL 使用的 Bash 是 openSUSE 的 /bin/bash。
答案1
它正在使用正确且最新的版本。
将原rpm包下载到工作文件夹中:
wget http://download.opensuse.org/update/leap/42.3/oss/x86_64/bash-4.3-83.3.1.x86_64.rpm
拆开包装:
rpm2cpio bash-4.3-83.3.1.x86_64.rpm | cpio -idmv
包含的 bash 是:
./bin/bash --version # The leading . is important
GNU bash, Version 4.3.42(1)-release (x86_64-suse-linux-gnu)
软件包的版本号并不完全链接到已安装软件的版本(这里仅4.3部分)。想象一下这样一个场景:包维护者犯了一个错误并想要发送更新。打包的软件版本保持不变,但他要更新软件包,因此增加了软件包版本。