在第一个完成后阅读时运行另一个

在第一个完成后阅读时运行另一个

我想while read在第一个完成后使用不同的输入文件+ python 脚本运行另一个。示例代码:

#!/bin/bash
while read -r line;
do
    python3 script.py -d $line --output test
done < domain.txt && 
mv *.txt savehere && 
dos2unix savehere/* && 
sort savehere/*.txt | uniq > done.txt

我知道我可以这样做:

#!/bin/bash
while read -r line;
do
    python3 script.py -d $line --output test && 
    python3 script1337.py -d $line
done < domain.txt && 
mv *.txt savehere && 
dos2unix savehere/* && 
sort savehere/*.txt | uniq > done.txt

但这不是我想要的 - 我需要使用不同的输入文件,并希望script1337.pyscript.py完成后运行domain.txt(它不起作用,&&因为它接受 1 个参数)。

答案1

还有一种while免费的方式:

xargs -L 1 -I '{}' python3 script.py -d \"'{}'\" --output test < domain.txt &&
xargs -L 1 -I '{}' python3 script1337.py -d \"'{}'\"           < scriptfile.txt &&
mv *.txt savehere && 
dos2unix savehere/* && 
sort savehere/*.txt | uniq > done.txt

本来就是较少的但效率很高,因为它调用xargs外部实用程序。

答案2

你有

while read -r line; do 
    python3 script.py -d "$line" --output test
done < domain.txt \
  && mv *.txt savehere \
  && dos2unix savehere/* \
  && sort savehere/*.txt | uniq > done.txt

您想要使用分组大括号吗?

{
    while read -r line; do 
        python3 script.py -d "$line" --output test
    done < domain.txt
    while read -r line; do 
        python3 scripy1337.py -d "$line"
    done < other_input_file
} && mv *.txt savehere \
  && dos2unix savehere/* \
  && sort savehere/*.txt | uniq > done.txt

答案3

#!/bin/bash
#!/usr/bin/env python3
while read -r line; do  #foobar
    python3 script.py -d $line --output test #foobar
done < domain.txt && 
while read -r line; do  #foobar
    python3 script1337.py -d $line #foobar
done < scriptfile.txt && 
mv *.txt savehere && 
dos2unix savehere/* && 
sort savehere/*.txt | uniq > done.txt #foobar

相关内容