shell 如何让Bash(.sh)中的脚本在完成运行之前等待创建文件的命令的输出?

zzzyeukh  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(280)

例如,我有这样的代码

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'运行完后才执行?(我添加了&以尝试修复,但它一直使用空文件)

vom3gejh

vom3gejh1#

请注意,2cd命令后面的“&”似乎不合理,因为您想控制那里的序列,所以永远不应该这样做。
至于计时问题,您需要在第一行之后添加以下行:

bwa_PROC=$!

echo "Waiting for 'bwa [PID= ${bwa_PROC}] ..."
wait ${bwa_PROC}

相关问题