yumから利用可能な更新のリストを生成し、各パッケージの現在のバージョンと更新されたバージョンを含むCSVにエクスポートするにはどうすればよいですか?

ジェイムス

Centos7ボックスで次のスクリプトを実行しています。アイデアは、現在のバージョンと新しいバージョンとともに、現在更新可能なパッケージをリストすることです。これが完了したら、結果を.csvファイルに送信してExcelにインポートします。

これが私が使用しているbashスクリプトです:

#! /usr/bin/bash

echo \"timestamp\",\"package name\",\"current version\",\"update version\"
yum -q check-update| while read i
do
    i=$(echo $i) #this strips off yum's irritating use of whitespace
    if [ "${i}x" != "x" ]
    then
        TIMESTAMP=$( date +%D" "%r )
        UVERSION=${i#*\ }
        UVERSION=${UVERSION%\ *}
        PNAME=${i%%\ *}
        PNAME=${PNAME%.*}
        echo \"$TIMESTAMP\",$(rpm -q "${PNAME}" --qf '"%{NAME}","%{VERSION}","')${UVERSION}\"
    fi
done

結果は次のようになります。

"timestamp"、 "package name"、 "current version"、 "update version"
"06/20/18 02:19:37 PM"、 "cloudbackup-updater"、 "1.5.3"、 "1.5.16-1 "
" 06/20/18 02:19:37 PM "、" dhclient "、" 4.1.1 "、" 12:4.1.1-53.P1.el6.centos.4 "
" 06/20/18 02: 19:37 PM "、" dhcp-common "、" 4.1.1 "、" 12:4.1.1-53.P1.el6.centos.4 "
" 06/20/18 02:19:37 PM "、" kernel "、" 2.6.32 "、" "kernel"、 "2.6.32"、 "" kernel "、" 2.6.32 "、" "kernel"、 "2.6.32"、 "" kernel "、" 2.6。 32 "、" 2.6.32-696.30.1.el6 "
" 06/20/18 02:19:37 PM "、" kernel-firmware "、" 2.6.32 "、"2.6.32-696.30.1.el6"
"06/20/18 02:19:37 PM"、 "kernel-headers"、 "2.6.32"、 "2.6.32-696.30.1.el6"

5行目が情報を繰り返していることに注意してください。これは、スクリプトがRPMクエリを実行するときに、フルネーム「kernel.x86_64」ではなくパッケージ「kernel」をクエリしているためだと思います。

走ったら

yum check-update

次のパッケージを更新できます。

cloudbackup-updater.noarch
dhclient.x86_64
dhcp-common.x86_64
kernel.x86_64
kernel-firmware.noarch
kernel-headers.x86_64

スクリプトの何が問題になっていますか?フルネームではなく、各パッケージの名前の最初の部分のみに一致しますか?

ジェイソン

問題はPNAME割り当てです

PNAME=${PNAME%.*}

これは、ファイル名から拡張子を削除するために使用したものです。ピリオドの右側にあるすべて(および含む)を削除しています。私が見る限り、この行は本当に必要ありません。変数の割り当てを引用することもお勧めします。だからこのようなもの:

TIMESTAMP="$( date +%D" "%r )"
UVERSION="${i#*\ }"
UVERSION="${UVERSION%\ *}"
PNAME="${i%%\ *}"
#PNAME="${PNAME%.*}"

$PNAMEこれらの割り当ての出力

cloudbackup-updater.noarch
dhclient.x86_64
dhcp-common.x86_64
kernel.x86_64
kernel-firmware.noarch
kernel-headers.x86_64

編集私はあなたのwhileループがyumの出力を間違って解析していると思っています。その行を次のように変更してみてください。

yum -q check-update | tr -s " " | while read PNAME UVERSION extra

これでyumのスペースの問題を処理できるので、を削除できますi=$(echo $i)また、これにより、個々の値が変数に直接読み込まれます。以来続いて、$iもはや存在しない、あなたは変更することができますif [ "${i}x" != "x" ]if [ "${PNAME}x" != "x" ](これは実際には空白をチェックするためのかなり巧妙な方法です)。したがって、最終的なスクリプトは次のようになります。

echo \"timestamp\",\"package name\",\"current version\",\"update version\"
yum -q check-update | tr -s " " | while read PNAME UVERSION extra
do
    if [ "${PNAME}x" != "x" ]; then
        TIMESTAMP=$( date +%D" "%r )
        echo \"$TIMESTAMP\",$(rpm -q "${PNAME}" --qf '"%{NAME}","%{VERSION}","')${UVERSION}\"
    fi
done

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ