쉘 스크립트를 사용하여 여러 RPM 패키지를 설치하고 쉼표로 구분된 입력 파일에서 가져오려면 어떻게 해야 합니까? [폐쇄]

쉘 스크립트를 사용하여 여러 RPM 패키지를 설치하고 쉼표로 구분된 입력 파일에서 가져오려면 어떻게 해야 합니까? [폐쇄]

쉘 스크립트를 사용하여 여러 패키지를 설치해야 하는데 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 1xargs에 플래그를 전달할 수 있습니다.

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

관련 정보