У меня есть скрипт bash, содержащий другие скрипты внутри, которые запускаются последовательно. Однако для их запуска требуется достаточно времени. Есть ли способ запускать эти сценарии параллельно, чтобы улучшить общую производительность? Они независимы друг от друга.Запуск нескольких скриптов в параллельном сценарии bash
Он похож на:
#!/bin/bash
#some code here
cppcheck.sh
churn.sh
run.sh
Update:
**git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1])
if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt**
sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt
sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt
echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html';
unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0;
set ylabel 'Number of lines changed (total)'; set title 'Files with high churn
level';set boxwidth 0.7; set style fill solid; set noborder;
plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot
echo "finished running churn.sh!"
Это код внутри churn.sh. Команде bold требуется около 40 секунд для реализации. Если в главном скрипте я помещаю амперсанд после churn.sh &, он выдает сообщение об ошибке, когда sed не может прочитать файл churn.txt (так как он еще не создан). Кажется, что он не дожидается, пока вывод не будет сохранен в файле. Я вставил wait после этой команды, но это не поможет.
Кроме того, вызов «wait» гарантирует, что родительский скрипт не будет завершен, пока все фоновые задания не будут завершены. –
@DarkCthulhu Я уже использовал это. Проблема заключается в следующем. Одна строка получает данные из git с использованием --numstat и выводит его в некоторый файл. Затем этот файл используется в следующей строке, но поскольку команда & запускает строку и переходит к следующей строке, следующая строка выдает сообщение об ошибке: «Файл не существует», поскольку для получения данных и сохраните его в txt-файле. Это почти аналогичная проблема во всех файлах сценариев. – Bdar
@Bdar Вы только что сказали, что скрипты не зависят друг от друга. Если вы хотите добавить немного времени между их выполнением, вы можете попробовать 'sleep n && churn.sh &'. Кроме того, вам лучше выполнять их последовательно. –