シェルスクリプトを使用して複数のRPMパッケージをインストールし、カンマ区切りの入力ファイルからインポートするにはどうすればよいですか? [閉鎖]

シェルスクリプトを使用して複数のRPMパッケージをインストールし、カンマ区切りの入力ファイルからインポートするにはどうすればよいですか? [閉鎖]

シェルスクリプトを使用して複数のパッケージをインストールする必要がありますが、rpm(パッケージ)名は入力ファイルにあります。

私は次の方法でやった。

私の入力ファイルはパス=/mstr/mstr_input_file.txt

私のスクリプトは次のとおりです

cat ${filename} | while read line
do
    tag=$(echo "${line}"|awk -F'=' '{print $1}')
    value=$(echo "${line}"|awk -F'=' '{print $2}')
    if [[ "${tag}" = "packagelist" ]]; then
            for pkg in $(echo "${value}" | sed "s/,/ /g")
            do

                    sudo yum install -y "${pkg}" && sleep 5
            done
    fi
done

ただし、sleepコマンドを使用すると、あるパッケージのインストール中に状態を維持し、別のパッケージのインストールを開始する必要があります。

私の入力ファイルには以下が含まれています。

packagelist=mailx,nc,expect,nfs-utils,telnet,glibc,libX11,libxcb,libXcomposite,libXcursor,libXdamage,libXext,libXfixes,libXi,libXrender,libXtst,glib2,nss,nss-util,nspr,cups-libs,dbus-libs,expat,libXScrnSaver,libXrandr,alsa-lib,cairo,at-spi2-atk,gtk3,gdk-pixbuf2,ibgcc,atk,at-spi2-atk,at-spi2-core,GConf2,libXScrnSaver,libxkbcommon,libwayland-client,libwayland-cursor,gtk3,gdk-pixbuf2 

答え1

あなたはそれを使用することができます:

yum install $(awk -F ',' 'BEGIN {ORS=" "} {for(i=1;i<=NF;i++) {print $i}}' filename)

awkこのコマンドは、スペースで区切られたパッケージ名をyumへの入力として提供します。

答え2

これをテストするrpmベースのシステムは私の前にありませんが、リストがrpmlist.txtであり、yumの代わりにrpmを使用してインストールしようとしているとします。

まず、次のようにします。

for i in `cat rpmlist.txt | tr ',' '\n'`; do echo $i ; done

これで、出力にパッケージが1行ずつ表示されると、正常に動作します。

for i in `cat rpmlist.txt | tr ',' '\n'`; do rpm -i $i ; done

メモ:交換できますスピード-iそしてうーん(-yはShureを意味します。パッケージのインストールに同意する必要はなく、尋ねずにインストールするだけです。)

答え3

xargs以下を使用して、コマンドにカンマ区切りの値を指定できます。

xargs -d',' yum install < inputfile.csv

パッケージを1つずつインストールするには、-n 1xargsにフラグを渡すことができます。

xargs -n1 -d',' yum install < inputfile.csv
  • <入力ファイルをxargsに送信する
  • xargs -d','「、」を区切り文字として使用して、入力ファイルからパラメータリストを生成し、それをyumに渡します。

packagelist次に始まる行を見つけて分割できますawk

</mstr/mstr_input_file.txt awk -F'=' '/packagelist=/{print $2}' | xargs -n1 -d',' yum install

関連情報