値を取得し、シェルの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

しかし、実際のP​​erlがあるようで、呼び出しは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つまで同時に実行できます。

関連情報