【发布时间】:2018-11-09 11:27:13
【问题描述】:
对于一个项目,我创建了多个 python 脚本,我想在 shell 脚本中的文件目录上运行这些脚本。在这个 shell 脚本中,我已经创建了一个带有多个命令的 for 循环。 第一个命令是一个 python 脚本,它将输入文件与本地数据库进行对比,并占用大部分内核。 下一个命令占用更少的内核,但需要很多时间。 对于每个文件,命令按一系列运行非常重要。 为了节省时间,我想更改 shell 脚本以运行文件的第一个命令,并在完成后在输出上同时运行下一个命令和下一个文件上的第一个命令。
谁能帮我解决这个问题?我试图搜索自己,但我找不到答案。我没有尝试运行这个脚本,因为我已经在运行没有 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
【问题讨论】:
-
你不能循环使用 glob 来获取文件然后运行吗?
-
刚开始,bash 对空格非常敏感,因此您的变量定义不会那样工作。它们应该没有空格,例如
tsv="/home/user/tsv"。引号不是绝对必要的,因为路径中没有任何空格,但它的风格很好。 -
命令的顺序有点难以理解,能否提供一些图片或类似 one > two 的东西;三
-
This post on unix exchange 有更多关于非阻塞命令的信息。