在文件的每一行上运行命令?

时间:2018-09-17 06:22:19

标签: bash scripting

使用此工具OpenEBS

我需要以某种方式编写bash one衬纸,该衬纸使我可以输入一个大的域列表并在文件中的每个域上运行./dirsearch.py​​,然后输出状态码200。

我认为我需要使用xargs来做到这一点。

像猫一样的东西| xargs -n1 -P1 -I + ./dirsearch.py​​。我对xargs和标志不是很熟悉,所以我对如何执行此操作感到好奇。

如果可能的话,我还想详细解释什么标志正确起作用以及为什么这样做。

非常感谢。

1 个答案:

答案 0 :(得分:0)

编辑

正如您提到的,xargs可以为您提供帮助。 -L选项将帮助您在每一行上使用xargs -P选项将帮助您在多个进程上运行xargs

cat yourdomainlist | xargs -L1 -P8 python dirsearch.py $1

Well -L选项设置执行python进程之前读取的行数。 -P设置进程数。

例如,我将创建一个包含以下内容的文件test.txt

test1
test2
test3
test4

还有一个脚本test.sh包含

echo $@

此命令:

cat test.txt | xargs sh test.sh

将返回

hello test1 test2 test3 test4

此命令:

cat test.txt | xargs -L 2 sh test.sh

将返回

hello test1 test2
hello test3 test4

这:

cat test.txt | xargs -L 1 sh test.sh

将返回

hello test1
hello test2
hello test3
hello test4

现在,我们验证-P参数:

我编辑我的test.sh文件以添加一个sleep参数:

sleep 10   
echo $@

cat test.txt | time xargs -L 1 -P 1 sh test.sh

将返回

hello test1
hello test2
hello test3
hello test4
0.00user 0.00system 0:40.01elapsed

这:

cat test.txt | time xargs -L 1 -P 4 sh test.sh

返回

hello test3
hello test1
hello test2
hello test4
0.00user 0.00system 0:10.00elapsed