GNU 并行可以改变 Bash 脚本的输出吗

GNU 并行可以改变 Bash 脚本的输出吗

我有一个目录,其中充满了子目录,每个子目录中有 74 个文件。我有 bash 脚本,它分析 74 个文件,并希望在所有目录上并行运行它。

当我进入每个子目录并手动运行 bash 脚本时,输出是完美的。

当尝试并行运行 bash 脚本时,bash 脚本似乎只在一个文件上运行。

这是我用来并行运行脚本的代码

parallel "cd {} && bash Final_Fantasy.sh" :::: dir.lst

奇怪的是我有另一个脚本在相同的文件上运行,使用与上面相同的代码,并导致 0 问题。

我尝试运行的脚本只是使用 awk 和 sed 以及一些 read while 循环进行一些简单的编写和覆盖。

我的并行代码有问题吗?或者我应该在哪里寻找问题?

谢谢!

编辑1:

1) Script1.sh:将 Final_Fantasy.sh 和单个输出文件 (Output1.txt) 复制到空目录中。

2) dir.lst 中找到的每个目录现在仅包含 2 个文件,Output1.txt 和 Final_Fantasy.sh

3) Final_Fantasy.sh 的第一行将 Output1.txt 切割成 74 个单独的文件。

4) Final_Fantasy 包含多行 awk、sed 和 grep,可在 read-while 循环内一次编辑 74 个文件之一。

5)对于某些步骤,我将输出写入 .txt 文件以供以后使用。

6) 循环的最后一步是将两个 .txt 文件放在cat一起。

exit我在文件末尾还有一个,因为我希望在出现任何问题时对循环进行故障排除。它看起来如下:

done < $filename2 done < $filename1 exit more code that works

此时我唯一能想到的是 1) HPC 超出了我的控制范围。 2)exit表现得很有趣,并在循环的第一次迭代后退出,而不是在分析完所有文件后退出。

编辑2)我无法在我的本地机器上重现此问题,并行和所有,这让我相信这是一个奇怪的HPC问题,我不认为我有控制权。

编辑3)有没有办法可以parallel逐步输出它正在执行的操作,以便我可以看到问题发生的位置?

答案1

parallel直接执行它的参数。除非你使用 shell,否则你无法做 shell 的事情。放在sh -c后面parallel

更新:以上仅适用于 moreutils 并行,而不适用于这个问题所涉及的 GNU 并行。

相关内容