![쉘 스크립트를 사용하여 여러 RPM 패키지를 설치하고 쉼표로 구분된 입력 파일에서 가져오려면 어떻게 해야 합니까? [폐쇄]](https://linux55.com/image/148548/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20RPM%20%ED%8C%A8%ED%82%A4%EC%A7%80%EB%A5%BC%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B3%A0%20%EC%89%BC%ED%91%9C%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EB%90%9C%20%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EA%B0%80%EC%A0%B8%EC%98%A4%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
쉘 스크립트를 사용하여 여러 패키지를 설치해야 하는데 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