Приведенная ниже функция выполняет команду в параметре 7, если процесс dialog
завершается с ненулевым -статусом выхода; иначе --если dialog
успешно завершится --функция выполнит команду в параметре 8.
function YesNoPrompt {
if ! dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
--backtitle "$3" --yes-label "$4" --no-label "$5" \
--yesno "$6" 26 38 20>&1 > /dev/tty
then
eval "$7"
else
eval "$8"
fi
}
Я переработал логику с ||
на полноценный -развернутый if/then/else
оператор; в противном случае ваша замена exit
(, если это не exit
или return
), может позволить выполнить последующуюsudo reboot
(или замену )на также . Предположительно, вы хотите, чтобы выполнялась только одна или другая команда. Я также привел все параметры.
eval
необходим, если вы хотите передать более одного слова в качестве команды (, напримерsudo reboot
). Обратите внимание, что eval
заставляет параметр пройти еще один цикл интерпретации оболочки, поэтому остерегайтесь таких вещей, как подстановочные знаки или другие расширения.
Если у вас есть GNU Parallel:
run_graph_algo1(){
./../bin/graph_algo1_cpp "$1" > "${1}.algo1.log"
}
export -f run_graph_algo1
parallel -j3 run_graph_algo1 ::: *.txt
echo "All Instances have finsihed running."
GNU Parallel создан именно для таких задач.
РЕДАКТИРОВАТЬ :Это неправильное решение. Приведенная ниже программа запустит 3 отдельные задачи, но будет ждать завершения всех трех, а затем запустит следующие три задачи. Я хочу, чтобы следующая задача запускалась после завершения любой из трех задач, чтобы в любой момент времени (, за исключением ближе к концу, всегда выполнялись три задачи)
После дальнейших поисков я смог найти работающее решение. Но если кто-то может дать более элегантное решение, я бы отметил его как правильное.
run_graph_algo1(){
./../bin/graph_algo1_cpp "$1" > "${1}.algo1.log"
}
N=3
#N = 4 just preserving this mistake
for file in *.txt
do
((i=i%N)); ((i++==0)) && wait
run_graph_algo1 "$file" &
done
wait
echo "All Instances have finsihed running."