![シェルスクリプトを使用して複数のRPMパッケージをインストールし、カンマ区切りの入力ファイルからインポートするにはどうすればよいですか? [閉鎖]](https://linux33.com/image/148548/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E8%A4%87%E6%95%B0%E3%81%AERPM%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%80%81%E3%82%AB%E3%83%B3%E3%83%9E%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%AE%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
シェルスクリプトを使用して複数のパッケージをインストールする必要がありますが、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 1
xargsにフラグを渡すことができます。
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