立即运行命令

立即运行命令

我有包含以下命令的文本文件

command1 file1_input; command2 file1_output
command1 file2_input; command2 file2_output
command1 file3_input; command2 file3_output
command1 file4_input; command2 file4_output
command1 file5_input; command2 file5_output
command1 file6_input; command2 file6_output
command1 file7_input; command2 file7_output
................
................
................
................
................

我将此文件命名为“命令”,然后使用“授予它权限”修改模式 a+x

我希望先运行命令 1,然后运行命令 2。我还希望将其立即应用于所有文件(文件 1、文件 2、...等)。我怎样才能修改这个文件的内容来做到这一点?

我尝试了以下方法,但没有成功:

(
command1 file1_input; command2 file1_output
command1 file2_input; command2 file2_output
command1 file3_input; command2 file3_output
command1 file4_input; command2 file4_output
command1 file5_input; command2 file5_output
command1 file6_input; command2 file6_output
command1 file7_input; command2 file7_output
................
................
................
................
................
)&

答案1

GNU并行做这个:

$ parallel < /path/to/file/containing/commands

与同时在后台运行所有进程相比,让 GNU 并行管理进程的优点是 GNU 并行可以限制同时作业的数量,使其保持在系统内存和处理能力范围内,例如通过--jobs--load--memfree等。

如果您只是同时运行文件中的所有行,则运行系统时可能会耗尽 RAM 或 CPU 功率,从而导致系统变得极其缓慢。如果您的系统首先耗尽 RAM,然后耗尽交换空间,您的进程甚至可能开始崩溃。

答案2

使线条如下:

(command1 file1_input; command2 file1_output) &
(command1 file2_input; command2 file2_output) &
...

每行将按顺序执行两个命令,但每行将作为并行后台作业进行分叉。

如果您希望仅在第一个命令成功完成时才执行第二个命令,请将分号更改为&&

(command1 file1_input && command2 file1_output) &
(command1 file2_input && command2 file2_output) &
...

相关内容