シェルスクリプトを使用して複数のパッケージをインストールする必要がありますが、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