如何使用 Shell 脚本并从逗号分隔的输入文件中获取它来安装多个 RPM 包?

如何使用 Shell 脚本并从逗号分隔的输入文件中获取它来安装多个 RPM 包?

我必须使用 shell 脚本安装多个软件包,并且 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 并且您想使用 rpm 而不是 yum 安装它。

首先做:

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

如果输出现在逐行显示包,它应该可以使用:

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

笔记:你可以替换转速-i嗯-y(-y 表示舒尔,您不必同意安装软件包,只需安装它们而不询问。)

答案3

您可以使用xargs将逗号分隔的值提供给命令:

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

如果你想一一安装软件包,你可以将标志传递-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

相关内容