為什麼不使用最新版本的 Bash?
我在 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
++ 。什麼 Bash 輸出仍然是舊版本號。X``V
GNU bash,版本 4.3.42(1)-release (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
,但我沒有看到任何可以解釋正在發生的事情的東西。為什麼不使用更新版本的 Bash?
我搜尋了名稱與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。
它正在使用正確和最新的版本。
將原始 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-Part)。想像一下包維護者出錯並想要發送更新的場景。打包的軟體版本保持不變,但他必須更新包,因此增加了包版本。