Как заставить скрипт в Bash (.sh) ждать вывода команды, которая создает файл, прежде чем он завершит работу?

Например, у меня есть этот код

      bwa mem -t 12 $ref_genome $first_fq $second_fq > bwa_mem_output.sam &

# Go to software to run picard
cd .. &

cd Software &

echo 'Converting the result of bwa mem to sam'
java -jar picard.jar SamFormatConverter -I /home/manuelsokolov/manuelsokolov/Datasets/bwa_mem_output.sam -O /home/manuelsokolov/manuelsokolov/Datasets/bwa_mem_output.bam &

Что происходит, так это то, что "bwa_mem_output.sam" создается до завершения выполнения команды "bwa mem" и является пустым файлом. И следующая команда java -jar Picard.jar запускается с этим пустым файлом.

Как я могу заставить команду «java -jar Picard.jar» выполняться только после завершения работы «bwa mem»? (Я добавил &, чтобы попытаться исправить, и он продолжал использовать пустой файл)

1 ответ

Обратите внимание, что «&» после каждой из двух команд cd кажется иррациональным, поскольку вы хотите управлять последовательностью там, вы никогда не должны этого делать.

Что касается проблемы со временем, вам нужно добавить эти строки после первой строки:

      bwa_PROC=$!

echo "Waiting for 'bwa [PID= ${bwa_PROC}] ..."
wait ${bwa_PROC}
Другие вопросы по тегам