쉘 스크립트를 사용하여 여러 패키지를 설치해야 하는데 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
이제 출력에 패키지가 한 줄씩 표시되면 제대로 작동할 것입니다.
for i in `cat rpmlist.txt | tr ',' '\n'`; do rpm -i $i ; done
노트:당신은 교체할 수 있습니다스피드-i그리고흠-이(-y는 Shure를 의미합니다. 패키지 설치에 동의할 필요가 없으며 묻지 않고 설치하기만 하면 됩니다.)
답변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