Centos 8.4 POSIXLY_CORRECT 是什麼,是什麼讓它發生了變化?
我正在使用來自 github 的這個腳本進行測試:
https://github.com/rocky-linux/rocky-tools/blob/main/migrate2rocky/migrate2rocky.sh
我昨天測試了這個,效果很好。今天我恢復到快照再做一次。這次腳本在第一次檢查時失敗:
if [ -n "$POSIXLY_CORRECT" ] || [ -z "$BASH_VERSION" ]; then printf '%s\n' "bash >= 4.0 is required for this script." >&2 exit 1 fi
具體來說,它在 $POSIXLY_CORRECT 上失敗(獨立執行程式碼片段進行驗證)。我檢查了正在執行的 bash 版本:
[user@server ~]$ rpm -qa | grep bash bash-completion-2.7-5.el8.noarch bash-4.4.20-1.el8_4.x86_64 [user@server ~]$ echo $BASH_VERSION 4.4.20(1)-release [user@server ~]$ echo $POSIXLY_CORRECT [user@server ~]$
據我所知,posix 是一個標準集,用於簡化 UNIX 作業系統之間的應用程序可移植性。
我們的伺服器沒有進行任何更改來解釋為什麼腳本不再有效。我在尚未使用該腳本的伺服器上測試了該腳本,並且出現了同樣的問題。
伺服器都是 CentOS 8.4。
我不知道 POSIXLY_CORRECT 做了什麼以及為什麼它;昨天還不錯的時候現在出錯了。
如果您有任何疑問,請告訴我,我真的迷路了。
編輯:“bash -x migrate2rocky.sh”命令的輸出
[user@server ~]$ sudo bash -x migrate2rocky.sh + '[' -n '' ']' + '[' -z '4.4.20(1)-release' ']' + (( BASH_VERSINFO < 4 )) + (( EUID != 0 )) + logfile=/var/log/migrate2rocky.log + truncate -s0 /var/log/migrate2rocky.log + exec ++ tee -a /var/log/migrate2rocky.log ++ tee -a /var/log/migrate2rocky.log + errcolor= + blue= + nocolor= + export LANG=en_US.UTF-8 + LANG=en_US.UTF-8 + shopt -s nullglob + SUPPORTED_MAJOR=8 + SUPPORTED_PLATFORM=platform:el8 ++ arch + ARCH=x86_64 + gpg_key_url=https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-rockyofficial + gpg_key_sha512=88fe66cf0a68648c2371120d56eb509835266d9efdf7c8b9ac8fc101bdf1f0e0197030d3ea65f4b5be89dc9d1ef08581adb068815c88d7b1dc40aa1c32990f6a + declare -A repo_urls + repo_urls=([rockybaseos]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/BaseOS/$ARCH/os/" [rockyappstream]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/AppStream/$ARCH/os/") + unset CDPATH + convert_info_dir=/root/convert + unset convert_to_rocky reinstall_all_rpms verify_all_rpms update_efi + noopts=0 + getopts hrVR option + (( ! noopts )) + usage + printf '%s\n' 'Usage: migrate2rocky.sh [OPTIONS]' '' Options: '-h Display this help' '-r Convert to rocky' '-V Verify switch' ' !! USE WITH CAUTION !!' Usage: migrate2rocky.sh [OPTIONS] Options: -h Display this help -r Convert to rocky -V Verify switch !! USE WITH CAUTION !! + exit 1 [user@server ~]$
奇怪的是,正如您在上面看到的,當通過“bash”命令而不是我昨天所做的“sh”執行時,該命令有效。
該錯誤消息表明您沒有使用
bash
比 4.0 更新的 shell 版本執行它。據推測,該腳本依賴於bash
shell 實現的特性,這些特性不同於或擴展了 Unix shell 語言的 POSIX 標準規定的特性集。您的問題的結尾確認您使用 執行它
sh
,在您的系統上它可能是除bash
. 即使你sh
是bash
偽裝的,它也會是在 POSIX 模式下執行的 shell。考慮使用 執行腳本
bash
,或者,如果腳本#!
在最頂部有一個 - 行,只需使腳本可執行(使用chmod +x scriptname
),然後像執行它./scriptname
。
POSIXLY_CORRECT
環境變數是一個變數,可幫助實用程序在工具實現不同於 POSIX 標準規定的行為時選擇行為。shell 在 POSIX 模式下的
bash
行為會略有不同(即,如果set -o posix
啟用,或者 shell 以 啟動sh
)。差異在手冊中標題為“ Bash POSIX 模式”的部分中進行了描述bash
。