Executando comandos de uma só vez

5

Eu tenho um arquivo de texto contendo os seguintes comandos

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

Eu chamei este arquivo de "comandos" e dei permissão usando " chmod a + x "

Eu quero que o comando 1 seja executado e, em seguida, o comando 2. Também quero que isso seja aplicado em todos os arquivos (file1, file2, .... etc) de uma só vez. Como posso modificar o conteúdo deste arquivo para fazer isso?

Eu tentei o seguinte, mas não funcionou:

(
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
................
................
................
................
................
)&
    
por Gilles 31.07.2016 / 02:41

2 respostas

3

Crie as linhas como tal:

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

E cada linha executará seus dois comandos em seqüência, mas cada linha será bifurcada como trabalhos paralelos em segundo plano.

Se você deseja que o segundo comando seja executado somente se o primeiro comando for concluído com êxito, altere o ponto-e-vírgula para && :

(command1 file1_input && command2 file1_output) &
(command1 file2_input && command2 file2_output) &
...
    
por 31.07.2016 / 03:30
6

O paralelo GNU faz isso:

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

A vantagem de deixar o GNU paralelo gerenciar o processo vs executá-los todos em segundo plano ao mesmo tempo é que o GNU paralelo pode limitar o número de trabalhos simultâneos para permanecer dentro da memória do sistema e capacidades de processamento, por exemplo. via --jobs , --load , --memfree , etc.

Se você simplesmente executar todas as linhas no arquivo simultaneamente, poderá executar o sistema sem a RAM ou com a CPU, tornando-o extremamente lento. Seus processos podem até começar a travar se o sistema for executado primeiro fora da RAM e depois fora do espaço de troca.

    
por 31.07.2016 / 03:12