Как выполнить команду в цикле , в то время как
после завершения выполнения фоновой команды внутри цикла, при этом все еще проходя цикл? Я включил комментарии в код, чтобы объяснить, что я имею в виду более четко.
while read file;
# run command 1 in the background. command 1 takes in "file" as an argument and does some processing on it
# run command 2 after command 1 is done, but keep going through the loop. Command 2 deletes "file"
done
РЕДАКТИРОВАТЬ: Одно из решений, которое я могу придумать, - это поместить тело цикла while в скрипт и запустить его в фоновом режиме, но я не уверен, что это лучший способ сделать это, и если есть лучший способ
РЕДАКТИРОВАТЬ 2: Я попробовал предложение @ steeldriver (см. комментарии), но я получаю синтаксическую ошибку Вот мой код:
#!/bin/bash
set -e
MONITORDIR="/home/user/random/ready_for_mapping/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE; do
file_dir=$(echo $NEWFILE | rev | cut -d / -f2- | rev)
if [[ $NEWFILE == *"paired"* ]]; then
while (( $(ls -1 $file_dir | wc -l) != 2 )); do
sleep 1
done
{ kallisto quant -i /home/user/random/Caenorhabditis_elegans.WBcel235.cdna.all.index -o $file_dir -t 12 $(ls $file_dir -1 | head -1) $(ls $file_dir -1 | tail -1) ;
rm $file_dir/*gz }&
else
{ kallisto quant -i /home/user/random/Caenorhabditis_elegans.WBcel235.cdna.all.index -o $file_dir --single -t 12 -l 250 -s 30 $(ls $file_dir *gz) ;
rm $file_dir/*gz }&
fi
done
Вот ошибка, которую я получаю:
./ second_queue: строка 15: синтаксическая ошибка рядом с неожиданным токеном `else '
Запомните PID длительного процесса и используйте его для проверки в цикле. bash
возвращает PID фонового процесса в $!
сразу после помещения задания в фоновый режим.
Сделайте что-то вроде (не проверено):
command_1 &
cpid=$!
....
# inside the loop,
if [[ -d /proc/$cpid ]] ; then
: command_1 still running
else
: command_1 not running
fi