我需要這 4 個內核版本中的最新版本。
- 4.18.0-187.el8.x86_64
- 4.18.0-193.14.3.el8_2.x86_64
- 4.18.0-193.el8.x86_64
- 4.18.0-80.el8.x86_64
我最初使用數字排序(它錯誤地回傳 0-80 版本),然后再進行相同的版本排序
latest_kernel_in_use=$(ls boot/vmlinuz* | sed 's/\/boot\/vmlinuz-//' | sort -V | tail -n1 )
該命令仍然回傳 4.18.0-193.el8.x86_64 而不是所需的 4.18.0-193.14.3.el8_2.x86_64 輸出。
幫我糾正命令中的錯誤。我另外進行了測驗,它確實是后綴 .el8.x86_64 使排序復雜化。
[編輯]所以我最終做到了,我洗掉了尾隨的字母/字母數字序列,識別符號至少涉及一個字母,無論 RPM 內核版本是4.18.0-193.14.3.el8_2.x86_64還是類似4.18.0-193.14在 Ubuntu 中看到的.3-generic
latest_kernel_in_use=$(ls boot/vmlinuz* | sed 's/boot\/vmlinuz-//' | sed 's/[.-][[:alpha:]][[:alnum:][:punct:]]*//' | sort -V | tail -n1)
輸出為 4.18.0-193.14.3
我可以從那里作業。
uj5u.com熱心網友回復:
似乎是因為 "e" > 1
我想出了這個恐怖,但我相信有更好的方法
#!/bin/bash
# list your kernels and remove "vmlinuz-" prefix
KERNELS=$(find boot/ -iname "vmlinuz*" -exec basename {} \; | sed s/vmlinuz-//g)
# declare empty arrays (this will be arrays to contain our version and suffix strings)
VERSIONS_ARRAY=()
SUFFIXES_ARRAY=()
# we loop thought each kernel version
for KERNEL in $KERNELS;do
# we will split each part of the kernel version on the dot (".")
IFS="."
read -ra KERNEL_VERSION <<< "$(echo $KERNEL)"
# we define 2 empty strings to collect the kernel parts
VERSION_STRING=""
SUFFIX_STRING=""
# we set back field separator to space
IFS=" "
# we loop throug all parts of kernel version
for KERNEL_PART in ${KERNEL_VERSION[@]};do
#echo -n $KERNEL_PART
# if we encounter el8 or el8_2 or x86_64 string we append to the SUFFIX_STRING
if [[ "$KERNEL_PART" == "el8" ]] || [[ "$KERNEL_PART" == "el8_2" ]] || [[ "$KERNEL_PART" == "x86_64" ]] ;then
SUFFIX_STRING="${SUFFIX_STRING}${KERNEL_PART}."
# else, we append to the VERSION_STRING
else
VERSION_STRING="${VERSION_STRING}${KERNEL_PART}."
fi
done
# we append the VERSION_STRING in VERSION_STRINGS
VERSIONS_ARRAY =("$VERSION_STRING")
# we append the SUFFIX_STRING in SUFFIXES_ARRAYS
SUFFIXES_ARRAY =("$SUFFIX_STRING")
done
# we set the field separator to split on linebreaks
IFS=$'\n'
# we find the highest value in version array
HIGHEST_VERSION=$(echo "${VERSIONS_ARRAY[*]}" | sort -V | tail -1)
# we get the position of highest value in array
for INDEX in ${VERSIONS_ARRAY[@]};do
if [[ "$VERSIONS_ARRAY{[$INDEX]}" = "$HIGHEST_VERSION" ]]; then
INDEX_OF_HIGHER_VERSION=$INDEX
fi
done
# we get the corresponding suffix by index
HIGHEST_VERSION_SUFFIX=${SUFFIXES_ARRAY[$INDEX_OF_HIGHER_VERSION]}
# we remove the trailing dot in suffix
len=${#HIGHEST_VERSION_SUFFIX}
HIGHEST_VERSION_SUFFIX=${HIGHEST_VERSION_SUFFIX::len-1}
echo "vmlinuz-${HIGHEST_VERSION}${HIGHEST_VERSION_SUFFIX}"
# we set back field separator to space
IFS=" "
uj5u.com熱心網友回復:
所以我最終做到了,我洗掉了尾隨的字母/字母數字序列,識別符號至少涉及一個字母,無論 RPM 內核版本是4.18.0-193.14.3.el8_2.x86_64還是類似4.18.0-193.14.3-在 Ubuntu 中看到的通用
latest_kernel_in_use=$(ls boot/vmlinuz* | sed 's/boot\/vmlinuz-//' | sed 's/[.-][[:alpha:]][[:alnum:][:punct:]]*//' | sort -V | tail -n1)
輸出為4.18.0-193.14.3
我可以從這里作業。
uj5u.com熱心網友回復:
latest_kernel_in_use=$(ls /boot/vmlinuz* | sed 's//boot/vmlinuz-//' | sed 's/[.-][[:alpha:]][[:alnum:][:punct:] ]*//' | 排序 -V | 尾 -n1)
(/boot/vmlinux*) s//boot ...)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/453388.html
上一篇:什么是參考命令?
下一篇:當我在CodingBatPython(https://codingbat.com/prob/p118406)上提交代碼時出現超時錯誤
