获取值并将其传递到 shell 上的 for 循环中的变量中

获取值并将其传递到 shell 上的 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 脚本的最多四个实例同时运行。

相关内容