仅在 gnu parallel 运行所有作业后才执行命令

execute command only after gnu parallel runs all jobs

我有 bash 文件 -

cat input.txt | parallel -j4 'python {}'

cp -r outputs /home/usr/my_outputs

我只想在所有作业执行完毕后才将 outputs 复制到 my_outputs。目前,它看起来像 parallel returns 立即(在启动作业后)然后 cp -r 立即执行,但我想在复制之前等待作业完成执行。我该怎么做呢?谢谢!

编辑: input.txt 就像 -

run1.py -n 5 
run2.py -n 5 
run3.py -n 5 
run4.py -n 5 

我做过类似的事情,我同时有 4 个 python 脚本 运行 并且遇到了同样的问题,尽管我是将它们推到后台。这些脚本写入了稍后在我的 bash 脚本中使用的文件。我使用 wait $(jobs -rp) -

解决了它
python script1.py & 
python script2.py & 
python script3.py & 
python script4.py & 
wait $(jobs -rp)

# other bash code that needs to run after the above

这也适用于 gnu parallel。试试这个:

cat input.txt | parallel -j4 'python {}'
wait $(jobs -rp)
cp -r outputs /home/usr/my_outputs

尝试:

parallel --colsep ' '

否则你实际上是在尝试 运行:

python 'run1.py -n 5'

这意味着 Python 解释器正在寻找一个名为 run1.py -n 5

的脚本