Выполняя бэш-скрипты одновременно

Попробуйте pup , инструмент командной строки для обработки HTML. Например:

pup '#the_div_id' < file.html

1
01.03.2019, 22:33
3 ответа

Вы можете запускать свои скрипты в tmux или screen практически в любом количестве фоновых процессов. Доступ к этим процессам можно получить в любое время.

См. tmux или экран GNU

5
27.01.2020, 23:12

Вы можете написать вокруг них сценарий-оболочку, который отправляет их все на задний план, а затем перехватывает Ctrl+C:

#!/bin/bash

trap ctrl_c INT

scripts=(./script1.sh./script2.sh./script3.sh )

ctrl_c () {
    printf 'Found [%i] PIDs running\n' "${#pids[@]}"
    for pid in "${pids[@]}"; do
        printf 'Killing PID: %i\n' "$pid"
        kill "$pid"
    done
}

for script in "${scripts[@]}"; do
    "$script" &
    pids+=($!)
done

for pid in "${pids[@]}"; do
    wait "$pid"
done

Таким образом, если вы нажмете ctrl+c, все pids, которые были захвачены ранее, будут уничтожены:

$ cat./script{1..3}.sh
#!/bin/bash

sleep 30; echo foo
#!/bin/bash

sleep 30; echo bar
#!/bin/bash

sleep 30; echo baz

$./script4.sh
^CFound [3] PIDs running
Killing PID: 48971
Killing PID: 48972
Killing PID: 48973
./script4.sh: line 21: 48971 Terminated: 15          "$script"
./script4.sh: line 21: 48972 Terminated: 15          "$script"
./script4.sh: line 21: 48973 Terminated: 15          "$script"
3
27.01.2020, 23:12

Попробуйте:

parallel -j0 --line-buffer :::./script1./script2./script3
0
27.01.2020, 23:12

Теги

Похожие вопросы