我必须使用 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
<
将输入文件发送到 xargsxargs -d','
以“,”作为分隔符,从输入文件中生成参数列表并将它们传递给 yum。
packagelist
您可以查找并拆分以开头的行awk
:
</mstr/mstr_input_file.txt awk -F'=' '/packagelist=/{print $2}' | xargs -n1 -d',' yum install