지금 명령 실행

지금 명령 실행

다음 명령이 포함된 텍스트 파일이 있습니다.

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
................
................
................
................
................

이 파일의 이름을 "command"로 지정한 다음 "권한 부여"를 사용했습니다.수정 모드 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 Parallel이 프로세스를 관리하도록 하는 것의 장점은 GNU Parallel이 , --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) &
...

관련 정보