값을 가져와서 셸의 for 루프에 있는 변수에 전달합니다.

값을 가져와서 셸의 for 루프에 있는 변수에 전달합니다.

접두사, 접미사 확장 없이 주어진 목록의 값을 가져오는 스크립트를 작성하고 싶습니다. 이 부분은 성공적으로 작동합니다.

#!/bin/bash

cd /aws/awstats/

for name in awstats.*.conf; do

    basename "${name#awstats.}" .conf

done

그런 다음 변수를 for 루프에 전달해야 합니다. 그런 다음 변수는 명령에 따라 실행되어야 합니다.

/usr/bin/perl -config=$variable -update

위 명령에서는 변수를 사용하기 위해 반복적인 시도가 필요합니다. 이 문제에 대한 해결책을 아는 사람이 있나요?

답변1

원래 루프를 사용하고 확장하여 명령을 사용하십시오 perl.

#!/bin/bash

cd /aws/awstats/

for name in awstats.*.conf; do
    /usr/bin/perl -config="$(basename "${name#awstats.}" .conf)" -update 
done

또는 제안한 대로 변수를 사용하십시오.

#!/bin/bash

cd /aws/awstats/

for name in awstats.*.conf; do
    config=$(basename "${name#awstats.}" .conf)
    /usr/bin/perl -config="$config" -update 
done

그러나 실제 Perl이 있는 것 같아서 호출이 perl약간 혼란스럽습니다.스크립트명령줄에서 누락되었습니다. 나는 실제 통화가 다음과 같을 것이라고 생각했을 것입니다

perl /some/path/somescript.pl -config="$config" -update 

그렇지 않으면

/some/path/somescript.pl -config="$config" -update 

"동시에"라는 말이 무슨 뜻인지도 혼란스럽습니다. perl동시에 여러 명령을 실행 하고 싶습니까 ?

#!/bin/bash

cd /aws/awstats/

for name in awstats.*.conf; do
    basename "${name#awstats.}" .conf
done |
xargs -I {} -P 4 /some/path/somescript.pl -config="{}" -update 

이렇게 하면 Perl 스크립트 인스턴스를 최대 4개까지 동시에 실행할 수 있습니다.

관련 정보