对于一个项目,我创建了多个python脚本,并且希望在shell脚本中的文件目录上运行这些脚本。在此Shell脚本中,我已经使用多个命令创建了一个for循环。 第一个命令是一个Python脚本,该脚本将输入文件放入本地数据库,并占用大多数内核。 接下来的命令占用更少的内核,但是会花费很多时间。 对于每个文件,命令要按顺序运行非常重要。 为了节省时间,我想更改shell脚本以运行文件的第一个命令,并在完成后在输出上运行下一个命令,并在下一个文件上同时运行第一个命令。
有人可以帮助我吗?我试图进行自我搜索,但找不到答案。我没有尝试运行此脚本,因为我已经在运行没有外壳脚本的python脚本。
这是到目前为止的脚本:
#!/bin/bash
tsv=/home/user/tsv
fasta=/home/user/fasta/*
clustering=/home/user/clustering
for file in ${fasta}
do
python blastn_new.py --fasta ${file} --tsv ${tsv}/${file}.tsv &&
mkdir ${clustering}/${file} &&
mkdir ${clustering}/${file}/clusters &&
python blastparsPB.py --clusters ${clustering}/${file}/${file}.txt --fish ${tsv}/${file}.tsv --dir ${clustering}/${file}/clusters/
done
答案 0 :(得分:1)
您可以在后台运行第二个脚本。
以下内容也有一些相切的注释,并稍微重新格式化了代码。
#!/bin/bash
# You cannot have spaces around the equals signs
# Also, avoid hard-coding an absolute path
tsv=./tsv
db=./newpacbiodb/pacbiodb
clustering=./clustering
# Notice proper quoting throughout
for file in ./fasta/*
do
python blastn_new.py \
--fasta "${file}" \
--tsv "${tsv}/${file}.tsv" &&
# mkdir -p creates an entire path if necessary
# (and works fine even if the directory already exists)
mkdir -p "${clustering}/${file}/clusters" &&
python blastparsPB.py \
--clusters "${clustering}/${file}/${file}.txt" \
--fish "${tsv}/${file}.tsv" \
--dir "${clustering}/${file}/clusters/" &
done # notice the simple addition of background ^ job
很显然,这假设第二个Python脚本不喜欢连接某些东西,例如同时写入数据库,但这已经是已知的了。